sms BroadcastReceiver在应用程序终止后不接收SMS或仅在MI设备上重启设备

时间:2017-01-06 12:47:25

标签: android broadcastreceiver sms redmi-device

我的短信接收代码在除Xiomi Redmi设备之外的所有设备上都能正常工作

Xiomi Redmi设备上,我的应用程序(广播接收器)在应用程序因从最近的应用程序列表中轻扫或在设备重启后直到我启动应用程序而无法接收短信手动。 (在Mi Marshmallow和MI Lollipop设备上测试过。)

此问题仅在MI设备上发生。 App适用于三星,HTC,索尼,摩托罗拉,Micromax等其他设备。

我在清单中的代码:

 <uses-permission android:name="android.permission.SEND_SMS" />
 <uses-permission android:name="android.permission.RECEIVE_SMS" />
 <receiver
        android:name=".receiver.SMSBroadcastReceiver"
        android:enabled="true"
        android:priority="999">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED" />
        </intent-filter>
  </receiver>

广播接收器:

public class SMSBroadcastReceiver extends BroadcastReceiver {

 public void onReceive(Context context, Intent intent) {
    if (Constants.SMS_RECEIVED_ACTION.equals(intent.getAction())) {
        mContext = context.getApplicationContext();
        mIntent = intent;
        sendIntent();
    } else {
        LogUtil.e(TAG, "Intent action: " + intent.getAction());
    }
 }
}

2 个答案:

答案 0 :(得分:1)

Xiomi Redmi设备,应用程序限制比任何其他ROM更严格,由于这些限制,许多应用程序通知不符合时间表,并且仅在一段时间后才发送通知。原因可能是不同的范围,从谷歌的云消息传递到高级电池模式,使应用程序能够睡眠而不是收到通知。解决此问题请仔细阅读本文档  http://en.miui.com/forum.php?mod=viewthread&tid=268224&page=1

答案 1 :(得分:0)

终于得到了解决方案(实际上是解决方法)

<强> 1。首先检查是否有MI设备

if (!TextUtils.isEmpty(getMiUiVersionProperty())) { // its a MI device }

public String getMiUiVersionProperty() {
    BufferedReader reader = null;
    try {
        reader = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("getprop ro.miui.ui.version.name").getInputStream()), 1024);
        String line = reader.readLine();
        reader.close();
        return line;
    } catch (IOException e) {}
}

<强> 2。向用户显示一个对话框,为您的应用启用Autostart 例如enter image description here

第3。然后直接将用户导航到'自动启动'屏幕,以便为您的应用启用

public void openMiuiAutoStartPermissionActivity(Context context) { Intent intent = new Intent("miui.intent.action.APP_PERM_EDITOR"); String ROM = getMiUiVersionProperty(); if (TextUtils.equals(ROM, "V5")) { PackageInfo pInfo = null; try { pInfo = context.getPackageManager().getPackageInfo( context.getPackageName(), 0); } catch (NameNotFoundException e) { e.printStackTrace(); } intent.setClassName("com.android.settings", "com.miui.securitycenter. permission.AppPermissionsEditor"); intent.putExtra("extra_package_uid", pInfo.applicationInfo.uid); } else if (TextUtils.equals(ROM, "V6") || TextUtils.equals(ROM, "V7") || TextUtils.equals(ROM, "V8")) { intent.setClassName( "com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"); intent.putExtra( "extra_pkgname", context.getPackageName()); } else { intent.setClassName( "com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity"); intent.putExtra( "extra_pkgname", context.getPackageName()); } if (isIntentAvailable(context, intent) && (context instanceof Activity)) { ((Activity) context).startActivityForResult(intent, AUTO_START_ENABLE_REQUEST); } }