BroadcastReceiver 和 PHONE_STATE 不起作用
BroadcastReceiver and PHONE_STATE does not work
我正在尝试在获得 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)
为了获得许可,我正在使用来自此 link 的代码:
到目前为止,我希望我的 phone 状态 BroadcastReceiver
只打印一些东西,所以它看起来像这样:
public class PhoneStateBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("RECEIEVER", "PhoneStateBroadcastReceiver Receiver started!");
}
}
无论如何,由于上面的权限被拒绝,所以没有打印任何内容。
在清单中是:
<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" />
知道它应该有什么相似之处或者有什么问题吗?
为了能够检测到 phone 来电,您需要:
1 in 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 添加一个 class PhoneStateBroadcastReceiver 扩展 BroadcastReceiver 并覆盖 onReceive()
3 在运行时,request PHONE_STATE 预先许可
ActivityCompat.requestPermissions(myMainActivity,
new String[]{Manifest.permission.READ_PHONE_STATE},
READ_PHONE_STATE_CODE);
并通过系统对话框给它
4 拨打 phone 电话
您将看到在 onReceive() 中捕获的意图:
intent: Intent { act=android.intent.action.READ_PHONE_STATE flg=0x10 cmp=com.myApp.network.PhoneStateBroadcastReceiver (has extras) }
Action: android.intent.action.PHONE_STATE
希望对您有所帮助
我正在尝试在获得 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)
为了获得许可,我正在使用来自此 link 的代码:
到目前为止,我希望我的 phone 状态 BroadcastReceiver
只打印一些东西,所以它看起来像这样:
public class PhoneStateBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("RECEIEVER", "PhoneStateBroadcastReceiver Receiver started!");
}
}
无论如何,由于上面的权限被拒绝,所以没有打印任何内容。
在清单中是:
<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" />
知道它应该有什么相似之处或者有什么问题吗?
为了能够检测到 phone 来电,您需要:
1 in 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 添加一个 class PhoneStateBroadcastReceiver 扩展 BroadcastReceiver 并覆盖 onReceive()
3 在运行时,request PHONE_STATE 预先许可
ActivityCompat.requestPermissions(myMainActivity,
new String[]{Manifest.permission.READ_PHONE_STATE},
READ_PHONE_STATE_CODE);
并通过系统对话框给它
4 拨打 phone 电话
您将看到在 onReceive() 中捕获的意图:
intent: Intent { act=android.intent.action.READ_PHONE_STATE flg=0x10 cmp=com.myApp.network.PhoneStateBroadcastReceiver (has extras) }
Action: android.intent.action.PHONE_STATE
希望对您有所帮助