android - BroadcastReceiver 和 PHONE_STATE 不起作用

标签 android broadcastreceiver android-manifest android-permissions

我正在尝试使用具有 READ_PHONE_STATE 权限的 BroadcastReceiver。我要求用户获得运行权限(Android M),但毕竟我得到了权限拒绝:

W/BroadcastQueue: Permission Denial: receiving Intent { act=android.intent.action.PHONE_STATE flg=0x10 (has extras) } to com.pb.qostest/.network.PhoneStateBroadcastReceiver requires android.permission.READ_PRIVILEGED_PHONE_STATE due to sender android (uid 1000)

对于权限,我使用来自此链接的代码:https://stackoverflow.com/a/38764861

到目前为止,我希望我的手机状态 BroadcastReceiver 只打印一些东西,所以它看起来像这样:

public class PhoneStateBroadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {   
         Log.d("RECEIEVER", "PhoneStateBroadcastReceiver Receiver started!");
    }
}

无论如何,由于上面的权限被拒绝,所以没有打印任何内容。

在 list 中它是:

<receiver
    android:name=".network.PhoneStateBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>
...
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

知道它应该如何相似或有什么问题吗?

最佳答案

为了能够检测到电话,您需要:

1 在 Manifest.xml 中,定义你的接收器并请求 PHONE_STATE 权限:

<receiver android:name=".network.PhoneStateBroadcastReceiver">
<intent-filter>
  <action android:name="android.intent.action.PHONE_STATE" />
    </intent-filter>
</receiver>
// ...
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

2 添加一个扩展 BroadcastReceiver 的类 PhoneStateBroadcastReceiver 并覆盖 onReceive()

3 在运行时,request预先获得 PHONE_STATE 许可

    ActivityCompat.requestPermissions(myMainActivity,
            new String[]{Manifest.permission.READ_PHONE_STATE},
            READ_PHONE_STATE_CODE);

通过系统对话框给它

4 打电话

您会看到在 onReceive() 中捕获的 Intent :

intent: Intent { act=android.intent.action.READ_PHONE_STATE flg=0x10 cmp=com.myApp.network.PhoneStateBroadcastReceiver (has extras) }
Action: android.intent.action.PHONE_STATE

希望对你有帮助

关于android - BroadcastReceiver 和 PHONE_STATE 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45504593/

相关文章:

android - 最佳实践(最适合 Android): authenticate a user with Facebook or Google login

java - 梯度错误: Could not find property file

java - 除非启动应用程序,否则手机重启后 IntentService 不会自动启动

使用 broadcastreceiver 接收的 Android NFC 标签

android - PackageManager.getComponentEnabledSettings() 在冷启动之间是否持久?

在基本模块中找不到动态功能模块中的 Android 提供程序

java - 如何将数据从多个Arraylist移动​​到多个Array(Java中)

PHP Firebase Clood Messaging (FCM) 错误缺少注册

android - IntentService 是否从 BroadcastReceiver 开始创建 Application 类的实例?

android - list 合并失败: Attribute application@appComponentFactory - Androidx