2016-08-04 124 views
0

我想從收到的短信中獲取信息。像文本發件人的電話號碼身體等信息我試圖用下面的代碼。我擁有Manifest的權限。獲取Android 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(); 
    } 
} 

它的工作原理。但不是在棉花糖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 
       } 
      } 
     } 
    } 
}; 

不要忘記註冊接收器。 OnCreate:

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

對不起。我忘了那個。我不確定,但也許你需要以編程方式檢查權限是否在清單中。新的android版本需要這個。例如,我嘗試寫入外部存儲。我有清單權限,但在編寫外部存儲時拋出異常。比我檢查權限編程和問題解決。也許對於短信來說也是一樣的。我有Android 5.0設備。我現在無法測試它。 –