2016-08-04 5 views
0

受信したテキストメッセージから情報を取得したい。テキスト送信者の電話番号などの情報のような情報です。私は以下のコードでそれをしようとしています。私はマニフェストのパーミッションを持っています。アンドロイド6.0.1で受信したテキストメッセージの情報を取得するMarshmallow API:23

public void onReceive(Context context, Intent intent) 
{ 
    //---get the SMS message passed in--- 
    Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs = null; 
    String str = ""; 
    if (bundle != null) 
    { 
     //---retrieve the SMS message received--- 
     Object[] pdus = (Object[]) bundle.get("pdus"); 
     msgs = new SmsMessage[pdus.length]; 
     for (int i=0; i<msgs.length; i++){ 
      msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
      str += "SMS from " + msgs[i].getOriginatingAddress(); 
      str += " :"; 
      str += msgs[i].getMessageBody().toString(); 
      str += "n"; 
     } 
     //---display the new SMS message--- 
     Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
    } 
} 

これは機能します。しかし、Marshmallow 6.0.1 APIではなく:23。また、SmsMessage、createFromPdu、getMessageBodyはすべて廃止されました。私はマシュマロでそれをする方法を見つけることができません。私に解決策を教えてください。

答えて

1
BroadcastReceiver smsReceiver = new BroadcastReceiver(){ 

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

     if (Build.VERSION.SDK_INT < 19) { 
      if(Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())){ 
       Bundle bundle = intent.getExtras();   //---get the SMS message passed in--- 
       SmsMessage[] msgs; 
       String sender; 
       if (bundle != null){ 
        //---retrieve the SMS message received--- 
        try{ 
         Object[] pdus = (Object[]) bundle.get("pdus"); 
         msgs = new SmsMessage[pdus.length]; 
         for(int i=0; i<msgs.length; i++){ 
          msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
          sender = msgs[i].getOriginatingAddress(); 
          String messageBody = msgs[i].getMessageBody(); 
          // do things here 
          } 
         } 
        }catch(Exception e){ 
         Log.d("Exception caught",e.getMessage()); 
        } 
       } 
      } 
     } 
     else{ 
      if (Telephony.Sms.Intents.SMS_RECEIVED_ACTION.equals(intent.getAction())) { 
       for (SmsMessage smsMessage : Telephony.Sms.Intents.getMessagesFromIntent(intent)) { 
        String messageBody = smsMessage.getMessageBody(); 
        String sender = smsMessage.getOriginatingAddress(); 
        // do things here 
       } 
      } 
     } 
    } 
}; 

レシーバを登録しないでください。作成:

IntentFilter intentFilter = new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION); 
    intentFilter.setPriority(990); 
    registerReceiver(smsReceiver, intentFilter); 

また、登録を解除します。

@Override 
protected void onDestroy() { 
    super.onDestroy(); 
    unregisterReceiver(smsReceiver); 
    threadTimer.interrupt(); 
} 
+0

ありがとうございます。私はそれを忘れてしまった。私は確かではありませんが、おそらくあなたがプログラムでマニフェストにあるかどうかを確認する必要があります。新しいアンドロイド版ではこれが必要です。たとえば、私は外部ストレージを書き込もうとしました。私はマニフェストの許可を持っていましたが、外部ストレージを作成している間は例外がスローされました。私はプログラム的に許可をチェックし、問題は解決されました。多分それはSMSのために同じです。私はAndroid 5.0デバイスを持っています。私は今それをテストすることはできません。 –

関連する問題