1

SMSを受信するアプリケーションを書きました。
AndroidManifest.xml に次のように書きました。

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

受信したすべての SMS は、クラス SmsReceiver によって分析されます。

クラス SmsReceiver:

public class SmsReceiver extends BroadcastReceiver
{
    private static final String SMS_RECEIVED = "com.example.remotecontrol.SMS_RECEIVED";
    private static final String SMS_CONTENT_KEY = "com.example.remotecontrol.SMS_CONTENT_KEY";

    @Override
    public void onReceive(Context context, Intent intent)
    {
        Bundle bundle = intent.getExtras();
        SmsMessage[] message = null;
        String contentMessage = "";
        if(bundle != null)
        {
            Object[] pdus = (Object[]) bundle.get("pdus");
            message = new SmsMessage[pdus.length];
            for(int i=0; i<message.length; i++)
            {
                message[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
                contentMessage += "SMS from " + message[i].getOriginatingAddress() + ": ";
                contentMessage += message[i].getMessageBody() + "\n";
            }

            Toast.makeText(context, contentMessage, Toast.LENGTH_LONG).show();
        }

        Intent intentSmsReceived = new Intent();
        intentSmsReceived.setAction(SMS_RECEIVED);
        intentSmsReceived.putExtra(SMS_CONTENT_KEY, contentMessage);
        context.sendBroadcast(intentSmsReceived);

    }

}

SMS を受信し、インテントをプログラムに送信します。

        registerReceiver(new BroadcastReceiver()
        {

            @Override
            public void onReceive(Context context, Intent intent)
            {
                String contentMessage = intent.getExtras().getString(SMS_CONTENT_KEY);
                Toast.makeText(context, contentMessage + "text", Toast.LENGTH_LONG).show();
                //TODO
                //process SMS

                unregisterReceiver(this);
            }

        }, new IntentFilter(SMS_RECEIVED));

コードのこの部分は、インテントを取得して SMS を処理し、アプリケーションと対話します。

Androidマニフェストに書かれたレシーバーの登録を解除するには? それはすべての SMS-es を処理します。私は、1 つの正しいものとクローズのみを処理するようにしたいと考えています。

4

1 に答える 1

2

ブロードキャスト レシーバーがマニフェストで指定されている場合、プログラムで登録を解除することはできません。マニフェストから取り出して、コード内から登録する必要があります。

または、登録したままにして、 onReceive の最初の行にチェックを追加することもできます。ブールフラグを介している可能性があります。

于 2012-09-23T10:51:38.770 に答える