2017-05-31 23 views
0

我試圖通過編程方式在手機中收到短信。無法檢測到收到的短信android

下面添加權限,

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

新增接收機

<activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <!-- Declare SMS Broadcast receiver --> 
     <receiver android:name=".SMSBReceiver"> 
      <intent-filter android:priority="1000" > 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
    </application> 

BroadcastReceiver

public class SMSBReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 


     if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
      Bundle bundle = intent.getExtras();   //---get the SMS message passed in--- 
      SmsMessage[] msgs = null; 
      String msg_from; 
      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]); 
         msg_from = msgs[i].getOriginatingAddress(); 
         String msgBody = msgs[i].getMessageBody(); 
        } 
       }catch(Exception e){ 
//       Log.d("Exception caught",e.getMessage()); 
       } 
      } 
     } 
    } 
} 

注:我已經檢查了在應用程序管理啓用權限爲SMS

讓我知道錯過了什麼?

+0

是否在清單的右側顯示''元素;即''標籤之間?你確定'name'屬性指向正確的類嗎?您是否在安裝後至少一次在您的應用中啓動了一個「Activity」,以使其脫離_stopped_狀態?默認情況下,您的設備是否具有超出標準限制第三方應用程序接收SMS的額外設置/權限?你究竟如何確定這不起作用? –

+0

@MikeM .:是的,我在應用程序標籤中添加了< receiver >。我編輯了這部分。請看一看。我沒有接到'onReceive'的任何電話,因此我沒有工作。 –

+0

@VineeshTP你問運行時許可? –

回答

0

試試這個我的朋友

1箱廣播接收機

public class SmsReceiver extends BroadcastReceiver { 

private static SmsListener mListener; 

@Override 
public void onReceive(Context context, Intent intent) { 
    Bundle data = intent.getExtras(); 

    Object[] pdus = (Object[]) data.get("pdus"); 

    for(int i=0;i<pdus.length;i++){ 
     SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdus[i]); 

     String sender = smsMessage.getDisplayOriginatingAddress(); 
     //You must check here if the sender is your provider and not another one with same text. 

     String messageBody = smsMessage.getMessageBody(); 

     //Pass on the text to our listener. 
     mListener.messageReceived(messageBody); 
    } 

} 

public static void bindListener(SmsListener listener) { 
    mListener = listener; 
} 
} 

2.創建這樣

public interface SmsListener { 
public void messageReceived(String messageText); 
} 

3.in您acitvity一個smslistener接口java文件添加代碼

requestSmsPermission();//method for sms recevied permission 


SmsReceiver.bindListener(new SmsListener() { 
     @Override 
     public void messageReceived(String messageText) { 
      Log.d("Text", messageText); 
      Toast.makeText(MainActivity.this, "Message: " + messageText, Toast.LENGTH_LONG).show(); 


     } 
    }); 

private void requestSmsPermission() { 
    String permission = Manifest.permission.RECEIVE_SMS; 
    int grant = ContextCompat.checkSelfPermission(this, permission); 
    if (grant != PackageManager.PERMISSION_GRANTED) { 
     String[] permission_list = new String[1]; 
     permission_list[0] = permission; 
     ActivityCompat.requestPermissions(this, permission_list, 1); 
    } 
} 

4.增加權限manifiest文件

<uses-permission android:name="android.permission.RECEIVE_SMS" /> 
<uses-permission android:name="android.permission.READ_SMS" /> 
  • 添加廣播receviver到manifiest文件

    <receiver android:name=".SmsReceiver"> 
        <intent-filter> 
         <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
        </intent-filter> 
    </receiver> 
    

  • +0

    問題是我錯過了添加權限 –