アプリケーションが着信テキスト メッセージを永続的にリッスンするようにしようとしています。これには何が最善のアプローチでしょうか?
現在、BroadcastReceiver が機能しており、アプリにローカル サービスを実装して遊んでいます。BroadcastReceiverをサービスに実装するのは、これを行う正しい方法ですか? サービスはメモリ不足の状態でも機能しますか?
アプリケーションが着信テキスト メッセージを永続的にリッスンするようにしようとしています。これには何が最善のアプローチでしょうか?
現在、BroadcastReceiver が機能しており、アプリにローカル サービスを実装して遊んでいます。BroadcastReceiverをサービスに実装するのは、これを行う正しい方法ですか? サービスはメモリ不足の状態でも機能しますか?
はい、ブロードキャスト レシーバーは着信テキストを聞くための最良の方法です。着信 SMS が受信された場合、受信した SMS でやりたいことを作業に IntentService を使用します。着信 SMS の受信者を次のように登録できます。
マニフェスト ファイル
<receiver class="SMSApp">
<intent-filter>
<action android:value="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.RECEIVE_SMS" />
Java ファイル
public class SMSApp extends BroadcastReceiver{
private static final String LOG_TAG = "SMSApp";
/* package */
static final String ACTION = "android.provider.Telephony.SMS_RECEIVED";
public void onReceive(Context context, Intent intent){
if (intent.getAction().equals(ACTION)){
Bundle bundle = intent.getExtras();
if (bundle != null){
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++){
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
for (SmsMessage message : messages){
String strFrom = message.getDisplayOriginatingAddress();
String strMsg = message.getDisplayMessageBody();
}
}
}
}
}
受信トレイで着信SMSをリッスンするためのContentObserverを登録できる2番目の方法content://sms/inbox
ブロードキャストレシーバーは、アプリケーションを起動する必要がないため、着信テキストを聞く正しい方法です。
マニフェストに登録してください