href sms:| | smsto:无法在android上使用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

我正在使用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 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>