无法检测到收到的短信android

问题描述:

我试图通过编程方式在手机中收到短信。无法检测到收到的短信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 .:是的,我在应用程序标签中添加了。我编辑了这部分。请看一看。我没有接到'onReceive'的任何电话,因此我没有工作。 –

+0

@VineeshTP你问运行时许可? –

试试这个我的朋友

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" /> 
  1. 添加广播receviver到manifiest文件

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

开始=>
+0

问题是我错过了添加权限 –