誰かがAndroid用のSMSレシーバー/ハンドラーコードを知っているか持っているかどうかを尋ねたいだけです。私は何日もネットを検索していて、まだ更新されたコードを見ていませんので、ほとんどはここにあるような非推奨のコードを持っているようですhttp://mobiforge.com/developing/story/sms-messaging- android誰かがアプリケーションでSMSを受信するための新しいコードを教えてくれたら本当にありがたいです。ありがとう!
3 に答える
私は最近、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 許容量をテストすることをやめることができます。
あなたが求めていることを行うためのコードを含むスレッドがここにあります。そこの回答にはいくつかの修正があることに注意してください。
android.telephony.gsm.SmsMessage
に置き換えると、これは機能するはずであり、非推奨ではありませんandroid.telephony.SmsMessage
。を聞くだけですandroid.provider.Telephony.SMS_RECEIVE
。