MIUI 10 tidak membiarkan layanan memulai aktivitas - Xiaomi Redmi Note

9

Aplikasi saya memiliki layanan dan aktivitas. Dari layanan, aktivitas dipanggil dengan kode berikut:

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

bahkan tanpa bendera, biasanya jendela aktivitas ditampilkan dengan tata letak yang benar. Namun, pada Xiaomi Redmi Note 4 dengan Android 7, tata letak aktivitas tidak ditampilkan. Saya hanya melihat baris berikut di logcat:

I / Timeline: Timeline: Activity_launch_request time: 281438674 maksud: Maksud {flg = 0x30000000 cmp = com.test.app / .MainActivity}

Saya percaya ini bukan masalah Android 7 (API 24) karena pada perangkat lain dengan Android 7, layanan dapat berhasil memulai aktivitas. Saya kira, MIUI mencegah peluncuran aktivitas dari layanan.

Saya mencoba mengubah bagaimana aktivitas didefinisikan dalam manifes. Saya juga mencoba dengan beberapa flag yang berbeda. Semua tes saya gagal. Saya tidak bisa berhasil memulai kegiatan. Masalah terburuk adalah bahwa tidak ada kesalahan / pengecualian dalam log.

Ada ide tentang ini?

ilker Aktuna
sumber
Masalah yang sama pada MIUI 11.
AlexS

Jawaban:

12

Di layar Info Aplikasi dari aplikasi Pengaturan sistem> Izin lainnya> Tampilkan jendela sembul saat berjalan di latar belakang.

Ini sepertinya diperkenalkan di MIUI 11.

Sunting: ini adalah sepotong kode yang saya gunakan. Saya menambahkannya ke dalam daftar izin di a 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);
}

UPDATE: Untuk memeriksa apakah izin ini diberikan, Anda dapat menggunakan layanan yang sudah berjalan dan meluncurkan aktivitas transparan boneka, dan dalam onCreatepanggilan kembali pada LocalBroadcastManageratau serupa dan Anda akan tahu itu diberikan. Ini adalah solusi yang jelek, tetapi mungkin berguna untuk beberapa.

Alex Newman
sumber
Terima kasih. itulah masalahnya. apakah ada cara untuk meminta izin ini di dalam aplikasi? atau tambahkan secara terprogram?
ilker Aktuna
Tidak ada yang saya sadari. Saya mengarahkan ke layar info aplikasi dan memberi tahu mereka untuk mengaktifkannya jika mereka menggunakan MIUI ..
Alex Newman
tetapi untuk melakukan itu Anda harus memulai aplikasi. bagaimana Anda melakukannya ? melalui pemberitahuan?
ilker Aktuna
Saya melakukannya ketika saya meminta izin lain yang diperlukan ketika aplikasi pertama kali dikonfigurasikan. Jadi dari aplikasi utama, bukan layanan.
Alex Newman
1
Informasi yang sangat berguna untuk MIUI, karena hanya memberi izin memulai aktivitas dari layanan Latar Belakang tanpa mengubah kode apa pun.
Panache