簡體   English   中英

SMS廣播接收器的onReceive()方法未被調用

[英]SMS Broadcast Receiver onReceive() method not being called

我正在構建一個SMS應用程序,並且有one activity和一個broadcast receiver 問題是broadcast receiver onReceive()方法沒有被調用。 下面給出了receiver類和manifest文件的code

廣播接收器

public class SmsBroadcastReceiver extends BroadcastReceiver {
    public AudioManager audioManager;
    SharedPreferences sharedPreferences;
    boolean b=false;
    String smsBody;
    final int REQUEST_CODE_ASK_PERMISSIONS = 123;

    public static final String SMS_BUNDLE = "pdus";

    SmsMessage smsMessage;
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context.getApplicationContext(),"Toast Long",Toast.LENGTH_LONG).show();


        sharedPreferences = context.getApplicationContext().getSharedPreferences("Pritom", context.MODE_PRIVATE);
        Bundle intentExtras = intent.getExtras();
        String format = intentExtras.getString("format");
        if (intentExtras != null) {
            Object[] sms = (Object[]) intentExtras.get(SMS_BUNDLE);
            String smsMessageStr = "";
            String pass3 = sharedPreferences.getString("password", null);
            for (int i = 0; i < sms.length; ++i) {

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

                    smsMessage = SmsMessage.createFromPdu((byte[]) sms[i], format);
                } else {
                    smsMessage = SmsMessage.createFromPdu((byte[]) sms[i]);
                }
                smsBody = smsMessage.getMessageBody().toString();
                String address = smsMessage.getOriginatingAddress();

                smsMessageStr += "SMS From: " + address + "\n";
                smsMessageStr += smsBody + "\n";
            }
            /*if (smsBody.equals("@general" + pass3)) {
                AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
                audioManager.setRingerMode(audioManager.RINGER_MODE_NORMAL);
            }*/
            Toast.makeText(context, "SMS : " + smsBody + pass3, Toast.LENGTH_SHORT).show();
            Log.d("Message:", smsBody + pass3);

        }
    }
}

這里的問題是, onReceive()下面的Toast消息未顯示,這表明未調用方法onReceive()

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mytrendin.inappmessaging">
    <uses-permission android:name="android.permission.READ_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <receiver android:name=".SmsBroadcastReceiver" android:exported="true" >
            <intent-filter android:priority="999" >
                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
            </intent-filter>
        </receiver>
    </application>

</manifest>

我已經使用Android 5.0.1來測試我的應用程序。 謝謝您的幫助 :)

嘗試在接收者的intent-filter設置更高優先級的android:priority="2147483647"

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM