当前位置: 首页 > 知识库问答 >
问题:

AndroidMarshmallow-SMS_RECEIVED权限

华哲茂
2023-03-14

我最近更新了我的应用程序,以支持android 6Marshmallow。我按照指示https://developer.android.com/training/permissions/requesting.html

添加了请求权限Manifest.permission.RECEIVE_SMS。当 im 运行以下代码时:

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

        getContext().sendOrderedBroadcast(intent, null);

我得到

java.lang.SecurityException:权限拒绝:不允许发送广播Android . provider . telephony . SMS _ RECEIVED from PID = 1999,uid=10056

即使我授予sms_RECEIVED权限,我也无法在设备上发送sms广播。

任何想法为什么我在android 6上得到这个安全例外。

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

共有3个答案

马祺
2023-03-14

您需要api级别23的权限,谷歌重新设计了权限系统,以便应用程序用户可以在安装您的应用程序后授予和撤销权限

final private int REQUEST_CODE_ASK_PERMISSIONS = 123;       

  if(Build.VERSION.SDK_INT < 23){
     //your code here
   }else {
    requestContactPermission();
   } 

private void requestContactPermission() {

   int hasContactPermission =ActivityCompat.checkSelfPermission(context,Manifest.permission.RECEIVE_SMS);

   if(hasContactPermission != PackageManager.PERMISSION_GRANTED ) {
    ActivityCompat.requestPermissions(Context, new String[]   {Manifest.permission.RECEIVE_SMS}, PERMISSION_REQUEST_CODE);
   }else {
    //Toast.makeText(AddContactsActivity.this, "Contact Permission is already granted", Toast.LENGTH_LONG).show();
     }
}


@Override
public void onRequestPermissionsResult(int requestCode, String[]           permissions, int[] grantResults) {
switch (requestCode) {
    case REQUEST_CODE_ASK_PERMISSIONS:
        // Check if the only required permission has been granted
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            Log.i("Permission", "Contact permission has now been granted. Showing result.");
            Toast.makeText(this,"Contact Permission is Granted",Toast.LENGTH_SHORT).show();
        } else {
            Log.i("Permission", "Contact permission was NOT granted.");
         } 
         break;
  }
}
於乐
2023-03-14

Android 6运行时权限<code>Android.provider.Telephony。SMS_RECEIVED允许您在系统SMS提供商发送该消息时接收该消息。

然而,你试图自己传播这个信息。我不能肯定这是许可的,而且正如你所发现的那样,不受同样许可的控制。(事实上,我假设它已经在Marshmallow上被锁定,这样只有系统能够通知应用程序收到短信)。

钱和平
2023-03-14

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

<uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>

而且,您需要在运行时请求许可。在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);
    }
}

这-你的活动。

 类似资料:
  • 我正在开发一个应用程序,它需要AndroidMarshmallow的位置权限。我遵循了实现它所需的所有步骤(函数调用)。当我运行应用程序时,它会弹出一个请求用户权限的框。当我选择是时,它会显示另一个弹出窗口,上面写着“检测到屏幕覆盖”,并将我带到显示应用程序列表的设置屏幕。在那里,我取消选中所有应用程序,然后按后退按钮返回我的应用程序。当调用回调时,我可以看到权限未被授予。它一直在发生。 为什么它

  • 在Android OS 4.0上运行我的应用程序并请求权限时,我遇到问题: 我总是接到电话 使用ActivityCompat检查权限。checkSelfPermission总是返回。 通过使用system dialog请求权限,它在OS 6.0上运行良好。Android操作系统4。除4.0之外,始终授予许可。OS 4.0其他权限(摄像头、日历、联系人、电话)运行正常,但导致此问题的。 也许是操作系

  • 我正在尝试在nexus 5(Android 6)和谷歌眼镜之间建立连接。要连接的客户端代码: 服务器端代码: 以https://github.com/vicmns/BluetoothGlass为参照。我面临的问题是,在accept()返回后,连接立即断开,并出现以下错误: 02-15 16:20:42.769 2163-2414/?e/Bt _ btif _ sock _ RFCOMM:find

  • 我想阻止用户在没有授予位置访问权限的情况下进入屏幕。 因此,我将权限请求用作名为requestLocation()的函数,该函数在onResume()中调用。 requestLocation()内部 ->另一个按钮有助于退出应用程序。 当在onRequestPermissionsResult()中标记deny或grant时,将再次执行requestLocation()。 但在选中“永不再次显示”并

  • 我是Android的新手。我正在我的Android应用程序中创建ImageUpload活动,但它在Apk(23)下运行良好。但每当我在AndroidMarshmallow上尝试它时,点击图片后它就会崩溃。 这是日志 java.lang.RuntimeException:将结果ResultInfo{who=null,request=1,result=-1,data=intent{}}传递到活动{co

  • 我没有找到有用的信息,如何编程或使用设备的设置删除特定的应用程序从白名单。 在Android6.0中引入了打瞌睡模式,在列出的同时,最后一个术语允许忽略部分打瞌睡模式。 要将应用程序放入白名单中,应用程序需要执行代码: 我尝试了下一个动作来将该应用程序从白名单中删除,它刚刚被放置,但没有什么帮助我: 在设置中清除数据应用程序 删除应用程序并重新安装 真正的帮助是改变应用程序的包名。我有一个意见,如