href sms:| | smsto:无法在android上使用html+;科尔多瓦(电话鸿沟)
我正在使用cordova和html(js/css等)构建一个android应用程序 当用户点击链接时,我试图打开sms应用程序 这是html代码:href sms:| | smsto:无法在android上使用html+;科尔多瓦(电话鸿沟),android,cordova,Android,Cordova,我正在使用cordova和html(js/css等)构建一个android应用程序 当用户点击链接时,我试图打开sms应用程序 这是html代码: <a href="sms:052xxxx808">Send Sms</a> 使用sms:scheme,我得到了这个错误:ERR\u UNKNOWN\u URL\u scheme D/Cordova(27207): CordovaWebViewClient.onReceivedError: Error code=-10 Des
<a href="sms:052xxxx808">Send Sms</a>
使用sms:
scheme,我得到了这个错误:ERR\u UNKNOWN\u URL\u scheme
D/Cordova(27207): CordovaWebViewClient.onReceivedError: Error code=-10 Description=net::ERR_UNKNOWN_URL_SCHEME URL=smsto:052xxxx808
我正在使用Nexus 5和Kitkat 4.4.2来测试应用程序
注:在Galaxy4上,短信:方案正在运行…(不是KitKat)
更新:
在浏览器中单击带有
sms:
方案的href链接确实有效,因此可能我缺少权限或类似的内容?我可以通过创建一个sms插件来实现这一点,该插件结合了前面的两个答案和。唯一需要注意的是,您必须检查构建版本是否与过去有所不同
以下是我的插件代码:
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);
}
}
下面是我如何从JavaScript调用它:
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>
我可以确认我看到了完全相同的东西,并且在我找到你的报告时,我正要发布同样的东西。您是否尝试过使用Cordova SMS插件而不是href?我开始走这条路了。
<feature name="SmsPlugin">
<param name="android-package" value="my.plugin.SmsPlugin" />
</feature>