Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 广播接收器未接收到传入的sms消息_Android_Sms_Android Manifest_Android Broadcastreceiver - Fatal编程技术网

Android 广播接收器未接收到传入的sms消息

Android 广播接收器未接收到传入的sms消息,android,sms,android-manifest,android-broadcastreceiver,Android,Sms,Android Manifest,Android Broadcastreceiver,我正在尝试使用receiver读取传入的消息。我遵循了教程并添加了以下代码,但广播接收器未被触发。onReceive中的日志从未被触发 显示 <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <application android:name=".x

我正在尝试使用receiver读取传入的消息。我遵循了教程并添加了以下代码,但广播接收器未被触发。onReceive中的日志从未被触发

显示

 <uses-permission android:name="android.permission.READ_SMS" />
 <uses-permission android:name="android.permission.RECEIVE_SMS" />
<application
    android:name=".xyz"
    android:allowBackup="true"
    android:icon="@mipmap/icon_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <receiver android:name="xyz.receiver.SmsReceiver">
        <intent-filter android:priority="1">
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
        </intent-filter>
    </receiver>

我已经使用了此代码,希望这也适用于您:)


我已经使用了此代码,希望这也适用于您:)


包名正确吗<代码>试着把它改成
@Darshan它是正确的..我也试过了..好的。自Android 6.0(API级别23)或Build.VERSION.SDK\u INT>=Build.VERSION\u code.M以来,请尝试在清单和意图过滤器中分别在接收器中添加这些行。您还应该在运行时检查权限。包名正确吗<代码>试着把它改成
@Darshan它是正确的..我也试过了..好的。自Android 6.0(API级别23)或Build.VERSION.SDK\u INT>=Build.VERSION\u CODES.M以来,尝试在清单和意图过滤器中分别在接收方中添加这些行。您还应该在运行时检查权限。从4.4开始,很少有行为被更改。可能是这导致了你们这边的问题。看看这个安卓博客:从4.4开始,很少有行为改变。可能是这导致了你们这边的问题。看看这个安卓博客:
public class SmsReceiver extends BroadcastReceiver {
    private static SmsListener mListener;
    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle data  = intent.getExtras();
        Log.e("TEST",data.toString());
        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();

            String messageBody = smsMessage.getMessageBody();

            mListener.messageReceived(messageBody);
        }
    }
    public static void bindListener(SmsListener listener) {
        mListener = listener;
    }
}
SmsReceiver.bindListener(new SmsListener() {
    @Override
    public void messageReceived(String messageText) {

        Toast.makeText(OTPActivity.this, "Message: " + messageText, Toast.LENGTH_LONG).show();
    }
});
private BroadcastReceiver mSMSReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        try {
            Log.e("sms receiver", "0000sdfghjkjhgfdsdfghjk");
            if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
                Bundle bundle = intent.getExtras();
                if (bundle != null) {
                    Object[] pdus = (Object[]) bundle.get("pdus");
                    String sms;
                    for (Object pdu : pdus) {
                        SmsMessage tmp;
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                            tmp = SmsMessage.createFromPdu((byte[]) pdu, bundle.getString("format"));
                        } else {
                            tmp = SmsMessage.createFromPdu((byte[]) pdu);
                        }
                        String senderMobile = tmp.getMessageBody();
                        sms = tmp.getMessageBody();
                        if (senderMobile.startsWith("کد فعالسازی شما در توپ 360:")) {
                            Log.e("sms receiver", "1111sdfghjkjhgfdsdfghjk");
                            final String mSMS = sms.replaceAll("[^0-9]", "");
                            //TODO Check SMS Center number with senderMobile if(senderMobile.equals(989100000)){...}
                            if (mSMS.length() == 5 || mSMS.length() == 6) {
                                Log.e("sms receiver", "2222sdfghjkjhgfdsdfghjk");
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        //CODE IS mSMS
                                        code.setText(mSMS);
                                        Log.e("sms receiver", "3333sdfghjkjhgfdsdfghjk");
                                    }
                                });
                                abortBroadcast();
                                break;
                            }
                        }


                    }
                }
            }
        } catch (Exception e) {
            Log.e("sms exception", e.getMessage());
        }
    }
};


@Override
public void onResume() {
    super.onResume();


    if (isGranted) {
        IntentFilter mIntentFilter = new IntentFilter();
        Log.e("sms receiver", "4444sdfghjkjhgfdsdfghjk");
        mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
        mIntentFilter.setPriority(Integer.MAX_VALUE);
        registerReceiver(mSMSReceiver, mIntentFilter);
    } else {

        Log.e("sms receiver", "5555sdfghjkjhgfdsdfghjk");
    }
}


@Override
public void onPause() {
    super.onPause();
    if (isRegistered) {
        unregisterReceiver(mSMSReceiver);
        Log.e("sms receiver", "6666sdfghjkjhgfdsdfghjk");
    }
}



@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 100: {
            // If request is cancelled, the result arrays are empty.

            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                isGranted = true;
                IntentFilter mIntentFilter = new IntentFilter();
                mIntentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");
                mIntentFilter.setPriority(Integer.MAX_VALUE);
                registerReceiver(mSMSReceiver, mIntentFilter);
                Log.e("sms receiver", "7777sdfghjkjhgfdsdfghjk");
                isRegistered = true;
                onResume();
            } else {
                isGranted = false;
                Snackbar snackbar = Snackbar.make(coordinatorLayout, "دریافت کننده خودکار پیامک غیرفعال است.", Snackbar.LENGTH_LONG);
                snackbar.show();
            }
            return;
        }
    }
}