-1

我正在开发一个简单的应用程序,它可以发送 SMS 消息并接收它们。onReceive 方法永远不会被触发。我正在使用我的 google pixel 5 进行测试(使用最新的 android 版本)。编译 SDK 为 31,最小 SDK 23

我应该以某种方式开始意图吗?或者我应该以某种方式禁用手机上的 SMS 应用程序?(谷歌消息)我怀疑由于某种原因我只允许 Send_sms 权限,而不是收到的权限。

在我的清单中,我添加了:

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

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

在我的 MainActivity 中,我使用此函数来启动用户权限弹出窗口:

    private void checkReadPermission() {
    if (ContextCompat.checkSelfPermission(this,
            Manifest.permission.SEND_SMS)
            != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.SEND_SMS}, 3);
        ActivityCompat.requestPermissions(this,
                new String[]{Manifest.permission.RECEIVE_SMS},
                MY_PERMISSIONS_REQUEST_SMS_RECEIVE);
    }
}

我的 SmsReceiver 类:

public class SmsReceiver extends BroadcastReceiver {
private static final String TAG = "MyBroadcastReceiver";
public static final String pdu_type = "pdus";

@TargetApi(Build.VERSION_CODES.M)
@Override
public void onReceive(Context context, Intent intent) {
    this.abortBroadcast();
    Log.d(TAG, "onReceive: got something");
    // Get the SMS message.
    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs;
    String strMessage = "";
    String format = bundle.getString("format");
    // Retrieve the SMS message received.
    Object[] pdus = (Object[]) bundle.get(pdu_type);
    if (pdus != null) {
        // Check the Android version.
        boolean isVersionM =
                (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M);
        // Fill the msgs array.
        msgs = new SmsMessage[pdus.length];
        for (int i = 0; i < msgs.length; i++) {
            // Check Android version and use appropriate createFromPdu.
            if (isVersionM) {
                // If Android version M or newer:
                msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i], format);
            } else {
                // If Android version L or older:
                msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            }
            // Build the message to show.
            strMessage += "SMS from " + msgs[i].getOriginatingAddress();
            strMessage += " :" + msgs[i].getMessageBody() + "\n";
            // Log and display the SMS message.
            Log.d(TAG, "onReceive: " + strMessage);
            Toast.makeText(context, strMessage, Toast.LENGTH_LONG).show();
        }
    }
 }
}
4

0 回答 0