android marshmallow - SMS_RECEIVED权限

Jon*_*nny 1 android-6.0-marshmallow

我最近更新了我的应用程序,以支持android 6 marshmallow.我按照https://developer.android.com/training/permissions/requesting.html上的说明进行操作

并为Manifest.permission.RECEIVE_SMS添加了requestPermissions.当我运行以下代码时:

        Log.i(TAG, "sending SMS...");
        Intent intent = new Intent("android.provider.Telephony.SMS_RECEIVED");
        intent.putExtra("pdus", data);

        getContext().sendOrderedBroadcast(intent, null);
Run Code Online (Sandbox Code Playgroud)

我明白了

java.lang.SecurityException:Permission Denial:不允许从pid = 1999发送广播android.provider.Telephony.SMS_RECEIVED,uid = 10056

即使我授予SMS_RECEIVED权限,我也无法在设备上发送短信广播.

任何想法为什么我在Android 6上获得此安全异常.

我的目标是在我的设备链接中生成假短信[ 我可以发送"短信接收意图"吗? .我没有在谷歌上发现任何提及它不再允许.

drz*_*ala 10

您需要将权限添加到清单xml中:

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
Run Code Online (Sandbox Code Playgroud)

AND,您需要在运行时请求权限.直到android 6,安装时自动授予权限.在android 6及更高版本中,您可以安装应用程序而不授予权限.您可以在活动类中使用此功能:

private void requestSmsPermission() {
    String permission = Manifest.permission.RECEIVE_SMS;
    int grant = ContextCompat.checkSelfPermission(this, permission);
    if ( grant != PackageManager.PERMISSION_GRANTED) {
        String[] permission_list = new String[1];
        permission_list[0] = permission;
        ActivityCompat.requestPermissions(this, permission_list, 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

- 你的活动.