3

我的短信接收代码在除小米红米设备外的所有设备上都能正常工作

小米红米设备上,当应用程序被从最近的应用程序列表中滑动或设备重新启动后,直到我手动启动应用程序而被杀死时,我的应用程序(广播接收器)无法接收短信。(在 Mi Marshmallow 和 MI Lollipop 设备上测试)。

此问题仅发生在 MI 设备上。应用程序在三星、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());
    }
 }
}
4

2 回答 2

1

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

于 2017-01-06T16:38:19.973 回答
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您的应用程序, 例如在此处输入图像描述

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); } }

于 2017-01-13T13:53:53.920 回答