0

这是一个用于创建直接快捷方式的代码示例,该快捷方式调用特定号码并且适用于 Android M 及更低版本。

public void installShortcutGetId(){
    Intent intent = new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
    intent.putExtra(Intent.EXTRA_SHORTCUT_NAME,"MyCallShortcut");
    intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, new Intent(Intent.ACTION_CALL, Uri.parse("tel:77777777")));
    intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, Intent.ShortcutIconResource.fromContext(context, android.R.drawable.sym_def_app_icon));
    context.sendBroadcast(intent);
}

相同的代码在 Android N 上不再起作用,我可以在 logcat 中看到以下内容:

 /com.android.launcher3 E/InstallShortcutReceiver: Ignoring malicious intent tel:77777777#Intent;action=android.intent.action.CALL;end

如果我将 ACTION_CALL 更改为 ACTION_DIAL,它可以在 Android N 上运行,但这不是我想要的。我正在寻找一种通过快捷方式直接拨打电话的方法。

在权限方面,我在运行时包含了这 2 个和 CALL_PHONE 请求。

<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
<uses-permission android:name="android.permission.CALL_PHONE" />
4

1 回答 1

1

仅仅因为您的应用程序具有 CALL_PHONE 权限并不意味着启动器具有该权限:这就是无法创建您的快捷方式的原因。

您可以改为创建自己的空活动的快捷方式,并ACTION_CALL从该活动启动 Intent。

于 2017-03-02T22:24:41.093 回答