5

私はブロードキャストレシーバーとabortBroadcast()メソッドを使用しているSMSブロッカーアプリケーションに取り組んでいます. しかし、私の場合、エミュレーターを使用して SMS を送信すると、SMS メッセージはブロックされず、受信トレイに到達し、エラーも発生します。

06-29 09:19:05.854: E/BroadcastReceiver(868): BroadcastReceiver trying to return result during a non-ordered broadcast

エミュレーターでアプリを終了しませんが、電話でテストするとアプリケーションが終了します。

はい、受信者の優先度を高い数値に設定し、次のように許可を求めました。

<receiver android:name="SMSMonitor">  
    <intent-filter android:priority="9999999">
        <action android:name="android.provider.Telephony.SMS_RECEIVED"></action> 
    </intent-filter>  
</receiver>

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

最後に、私のコードは次のとおりです。

public class SMSMonitor extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        boolean isOn = loadState(context,"isOn");// is blocking enabled?
        Bundle bundle = intent.getExtras();
        Object messages[] = (Object[]) bundle.get("pdus");
        SmsMessage smsMessage[] = new SmsMessage[messages.length];
        String mAddress;
        String mBody;
        String mTime;
        if(isOn){
            // if spam blocking is enabled.
            for (int n = 0; n < messages.length; n++) {
                smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
                mAddress=smsMessage[n].getDisplayOriginatingAddress().toString();

                mBody=smsMessage[n].getDisplayMessageBody().toString();

                mTime=getTime();
                if(isBlackList( mAddress)== true) {
                    this.addLog(mAddress, mBody, mTime);
                    abortBroadcast();
                    Toast.makeText(context,"Incoming SMS was blocked and logged.", Toast.LENGTH_LONG).show();  
                }
            }
        }
    }
}

ここで、Android が許可しないため、SMS ブロードキャストを中止できないと提案した人もいます。しかし、ここで多くの人がabortBroadcast()を使用してSMSをブロックすることを提案しているのを見てきました。また、実際にSMSをブロックできる市場のSMSブロッカーアプリをいくつか知っています. 彼らがabortbroadcastを使用しているかどうかはわかりません。

何か案は?

4

3 に答える 3

1

「Android 1.6 の時点で、着信 SMS メッセージ ブロードキャスト (android.provider.Telephony.SMS_RECEIVED) は「順序付きブロードキャスト」として配信されます。つまり、どのコンポーネントが最初にブロードキャストを受信する必要があるかをシステムに伝えることができます。」Android 1.5 を使用しており、ブロードキャストは順序付けされていません。

この男のおかげでここにリンク

于 2012-07-06T15:39:25.700 に答える
1

受信機からのトーストを表示していますか? レシーバーがマニフェストに正しく登録されていない可能性があります。

変えようとする、

<receiver android:name="SMSMonitor">

<receiver android:name=".SMSMonitor">
于 2014-07-08T11:25:51.960 に答える
1

間違いなくこれを行うことができます。あなたが書いたコードは完全に問題ありません。

優先度を から<intent-filter android:priority="9999999">に変更して<intent-filter android:priority="99999999">みてください。基本的には、指定した優先度よりも高くしてから、確認してみてください。

于 2012-06-29T10:10:38.983 に答える