9

まず第一に、私はすでに可能な解決策を探し、すべてを試しましたが、それでもうまくいきませんでした. 私は何かが欠けているに違いない。

SMS を受信/読み書きするアプリを作成しようとしています。書き込み部分は問題なく動作していますが、私の放送受信機は放送をキャッチしません。

AndroidManifest.xml

    <uses-permission android:name="android.permission.RECEIVE_SMS" />
    <uses-permission android:name="android.permission.SEND_SMS" />
    <uses-permission android:name="android.permission.WRITE_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
...
        <receiver android:name=".SmsReceiver"
            android:permission="android.permission.BROADCAST_SMS">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
        </receiver>

SmsReceiver.java

public class SmsReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {

    Toast.makeText(context, "ON RECEIVE BROADCAST", Toast.LENGTH_LONG).show();
    Log.d("ON ","RECEIVE");
     Bundle bundle = intent.getExtras();
        Object[] messages = (Object[]) bundle.get("pdus");
        SmsMessage[] sms = new SmsMessage[messages.length];
        // Create messages for each incoming PDU
        for (int n = 0; n < messages.length; n++) {
            sms[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
        }
        for (SmsMessage msg : sms) {
            Log.e("RECEIVED MSG",":"+msg.getMessageBody());
            // Verify if the message came from our known sender

        }
}

ログまたはトーストは発生しません。

android.intent.action.AIRPLANE_MODE宣言をテストするためだけにマニフェストのアクションを変更しようとしましたが、ブロードキャストが受信されましたが、SMS では機能しません。

更新しました

別の電話で試したところ、うまくいきました。Handcent SMS を使用しているため、ブロードキャストがブロックされている可能性があります。いずれにせよ、インストールされているアプリケーションとは関係なく、すべての電話で動作する必要があります。

4

4 に答える 4

6

私の疑問に答えるトピックを見つけました: Suppress / Block BroadcastReceiver in another app

優先度を最大 (999)に設定しても、別のアプリ (この場合は Handcent SMS アプリ) が同じ優先度を持つ場合、ブロードキャストを受信する最初のアプリケーションは、ユーザーが最初にインストールしたアプリケーションです。

私の場合は Handcent SMS で、受信時にブロードキャストを中止するため、アプリは何も受信しません。

于 2013-10-23T11:01:42.010 に答える