Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法接收广播消息_Android_Broadcastreceiver - Fatal编程技术网

Android 无法接收广播消息

Android 无法接收广播消息,android,broadcastreceiver,Android,Broadcastreceiver,我已经为广播接收器注册了“SMS接收事件”,但当我启动应用程序并向模拟器发送消息时,我没有看到广播接收器被触发的onReceive方法 AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.dev.code"> <uses-

我已经为广播接收器注册了“SMS接收事件”,但当我启动应用程序并向模拟器发送消息时,我没有看到广播接收器被触发的onReceive方法

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.dev.code">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">


        <receiver android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter android:priority="500">
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />

            </intent-filter>
        </receiver>

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

</manifest>


android.permission.RECEIVE_SMS权限是一个危险的权限。 您应该使用ActivityCompat.requestPermissions来请求它

<permission android:name="android.permission.RECEIVE_SMS"
    android:permissionGroup="android.permission-group.UNDEFINED"
    android:label="@string/permlab_receiveSms"
    android:description="@string/permdesc_receiveSms"
    android:permissionFlags="hardRestricted"
    android:protectionLevel="dangerous" />

我认为您需要在SDK的代码中检查大于或等于M(棉花糖)的权限-

以及根据用户操作的结果——

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 411) {
        if (grantResults.length == 0 || grantResults == null) {
             // show dialog that you need access to go ahead
        } else if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Your code here permission granted
        } else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
             // show dialog that you need access to go ahead
        }
    }
}

你在真实设备上测试过吗?您是否启用了SMS权限?如果您想在Emulator上接收SMS,请检查此答案:我猜您的应用程序没有授予SMS权限?您必须实现才能使用SMS您需要实现运行时权限。。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
  {
      if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission. RECEIVE_SMS) == PackageManager.PERMISSION_GRANTED) {
      //  you can receive sms   
      } 
      else
      {
         ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission. RECEIVE_SMS}, 411);
      }
  }
  else
  {
    //  you can receive sms          
  }
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == 411) {
        if (grantResults.length == 0 || grantResults == null) {
             // show dialog that you need access to go ahead
        } else if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            // Your code here permission granted
        } else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
             // show dialog that you need access to go ahead
        }
    }
}