두 개의 이전 답변 here과 here을 결합한 SMS 플러그인을 만들어이 기능을 사용할 수있었습니다. 유일한 단서는 이전 버전과 다른 방식으로 빌드 버전이 KitKat인지 확인하려는 의도를 확인해야한다는 것입니다.
가 여기 내 플러그인 코드입니다 :
public class SmsPlugin extends CordovaPlugin {
public final String ACTION_SEND_SMS = "SendSMS";
@Override
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
if (action.equals(ACTION_SEND_SMS)) {
try {
String phoneNumber = args.getString(0);
String message = args.getString(1);
String method = args.getString(2);
if (method.equalsIgnoreCase("INTENT")) {
invokeSMSIntent(phoneNumber, message);
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.NO_RESULT));
} else {
sendSMS(phoneNumber, message);
}
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
return true;
} catch (JSONException ex) {
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.JSON_EXCEPTION));
}
}
return false;
}
private void invokeSMSIntent(String phoneNumber, String message) {
Intent intent;
Activity activity = this.cordova.getActivity();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) // Android 4.4 and up
{
String defaultSmsPackageName = Telephony.Sms.getDefaultSmsPackage(activity);
intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:" + Uri.encode(phoneNumber)));
intent.putExtra("sms_body", message);
// Can be null in case that there is no default, then the user would be able to choose any app that supports this intent.
if (defaultSmsPackageName != null) {
intent.setPackage(defaultSmsPackageName);
}
} else {
intent = new Intent(Intent.ACTION_VIEW);
intent.setType("vnd.android-dir/mms-sms");
intent.putExtra("address", phoneNumber);
intent.putExtra("sms_body", message);
}
activity.startActivity(intent);
}
private void sendSMS(String phoneNumber, String message) {
SmsManager manager = SmsManager.getDefault();
PendingIntent sentIntent = PendingIntent.getActivity(this.cordova.getActivity(), 0, new Intent(), 0);
manager.sendTextMessage(phoneNumber, null, message, sentIntent, null);
}
}
그리고 여기 자바 스크립트에서 호출하는 방법입니다
var sms = function() {
message: function (phnum, callback) {
if (Ext.os.is.iOS) {
cordova.exec(callback, function (err) {
callback('The following error occurred: ' + err);
}, "Sms", "send", [ {"recipients": [phnum]} ]);
} else if (Ext.os.is.Android) {
cordova.exec(callback, function (err) {
callback('The following error occurred: ' + err);
}, "SmsPlugin", "SendSMS", [phnum, "", "INTENT"]);
} else {
document.location.href = "sms:" + phnum
}
}
};
module.exports = sms;
당신이를 추가해야합니다은 config.xml 파일 :
<feature name="SmsPlugin">
<param name="android-package" value="my.plugin.SmsPlugin" />
</feature>
내가 당신의 보고서를 발견했을 때 나는 똑같은 것을 보았고 똑같은 것을 올리려했다. href 대신 Cordova SMS 플러그인을 사용해 보셨습니까? 나는 그 길로 내려 가기 시작했다. – occasl