无法检测收到的短信android

时间:2017-05-31 05:02:40

标签: android broadcastreceiver sms

我正试图通过编程方式在手机中收到短信。

添加了以下权限,

 <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

的权限

让我知道遗漏的任何事情?

1 个答案:

答案 0 :(得分:1)

试试这个我的朋友

<强> 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。像这样创建一个smslistener接口

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

3.在你的acitvity 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.添加明确文件的权限

  <uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
  1. 将广播接收者添加到最明显的文件

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