web-dev-qa-db-ja.com

MIUI 10ではサービスを開始できません-Xiaomi Redmi Note

私のアプリにはサービスとアクティビティがあります。サービスから、次のコードでアクティビティが呼び出されます。

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

フラグがなくても、通常、アクティビティウィンドウは正しいレイアウトで表示されます。ただし、Xiaomi Redmi Note 4ではAndroid 7の場合、アクティビティレイアウトは表示されません。logcatに次の行しか表示されません。

I /タイムライン:タイムライン:Activity_launch_request時間:281438674インテント:インテント{flg = 0x30000000 cmp = com.test.app/.MainActivity}

これはAndroid 7(API 24)の問題ではないと思います。Android 7、の別のデバイスでは、サービスがアクティビティを正常に開始できるためです。MIUIサービスからのアクティビティの起動を妨げています。

マニフェストでのアクティビティの定義方法を変更してみました。また、いくつかの異なるフラグを試してみました。テストがすべて失敗しました。活動を始めることができませんでした。最悪の問題は、ログにエラー/例外がないことです。

これに関するアイデアはありますか?

8
ilker Aktuna

システム設定アプリの[アプリ情報]画面> [その他の権限]>バックグラウンドで実行中にポップアップウィンドウを表示します。

これはMIUI 11で導入されたようです。

編集:ここに私が使用するコードがあります。これをRecyclerViewの許可リストに追加します。

Class<?> c = Class.forName("Android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
String miui = (String) get.invoke(c, "ro.miui.ui.version.name");
if (miui != null && miui.contains("11")) {
            PermissionData mPopup = new PermissionData();
            mPopup.text = "Other permissions > Display pop-up while in background";
            mPopup.onClickListener = new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivity(intent);
                }
            };

            mPermissionData.add(mPopup);
}

更新:この権限が付与されているかどうかを確認するには、すでに実行中のサービスを使用してダミーの透過的なアクティビティを起動し、onCreateLocalBroadcastManagerまたは類似のものをコールバックすると、そのことがわかります付与されます。これは醜い解決策ですが、一部の人にとっては役立つかもしれません。

10
Alex Newman