1

誰かがAndroid用のSMSレシーバー/ハンドラーコードを知っているか持っているかどうかを尋ねたいだけです。私は何日もネットを検索していて、まだ更新されたコードを見ていませんので、ほとんどはここにあるような非推奨のコードを持っているようですhttp://mobiforge.com/developing/story/sms-messaging- android誰かがアプリケーションでSMSを受信するための新しいコードを教えてくれたら本当にありがたいです。ありがとう!

4

3 に答える 3

4

私は最近、SMS メッセージを処理するために動作する BroadcastReceiver を実装しました。重要な部分は、マニフェストと BroadcastReceiver です。

マニフェストでは、RECEIVE_SMS 権限が必要です。

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

READ_SMS は必要ありません。受信者エントリは次のようになります。

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

ほとんどの人が忘れているように見えるビットはandroid:exported="true"、ブロードキャストがアプリケーションの外部から発生するために必要とされることです。android:permission="android.permission.RECEIVE_SMS"一部の投稿では、またはが必要であることを示唆していますがandroid:permission="android.permission.BROADCAST_SMS"、そうではありません。

私の BroadcastReceiver 実装は次のようになります。

package smsmanager;

import java.util.List;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;

public class IncomingSmsBroadcastReceiver extends BroadcastReceiver {

    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";

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

        if (intent != null && SMS_RECEIVED.equals(intent.getAction())) {
            final SmsMessage smsMessage = extractSmsMessage(intent);
            processMessage(context, smsMessage);
        }

    }

    private SmsMessage extractSmsMessage(final Intent intent) {

        final Bundle pudsBundle = intent.getExtras();
        final Object[] pdus = (Object[]) pudsBundle.get("pdus");
        final SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[0]);

        return smsMessage;

    }

    private void processMessage(final Context context, final SmsMessage smsMessage) {
        // Do something interesting here
    }

}

そして、すべてが思い通りに機能し、SMS 許容量をテストすることをやめることができます。

于 2012-03-27T23:09:09.797 に答える
0

あなたが求めていることを行うためのコードを含むスレッドがここにあります。そこの回答にはいくつかの修正があることに注意してください。

于 2012-01-30T16:17:21.983 に答える
0

android.telephony.gsm.SmsMessageに置き換えると、これは機能するはずであり、非推奨ではありませんandroid.telephony.SmsMessage。を聞くだけですandroid.provider.Telephony.SMS_RECEIVE

于 2012-01-30T16:12:44.037 に答える