MIUI 10 không cho phép dịch vụ bắt đầu hoạt động - Xiaomi Redmi Note


9

Ứng dụng của tôi có một dịch vụ và một hoạt động. Từ dịch vụ, hoạt động được gọi với mã sau:

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

ngay cả khi không có cờ, thông thường cửa sổ hoạt động được hiển thị với bố cục chính xác. Tuy nhiên, trên Xiaomi Redmi Note 4 với Android 7, bố cục hoạt động không được hiển thị. Tôi chỉ thấy dòng sau trên logcat:

I / Dòng thời gian: Dòng thời gian: Activity_launch_Vquest thời gian: 281438674 ý định: Ý định {flg = 0x30000000 cmp = com.test.app / .MainActivity}

Tôi tin rằng đây không phải là sự cố Android 7 (API 24) vì trên một thiết bị khác có Android 7, dịch vụ có thể bắt đầu hoạt động thành công. Tôi đoán, MIUI đang ngăn chặn sự ra mắt của hoạt động từ dịch vụ.

Tôi đã thử thay đổi cách xác định hoạt động trong bảng kê khai. Tôi cũng đã thử với một số cờ khác nhau. Tất cả các bài kiểm tra của tôi đều thất bại. Tôi không thể thành công trong việc bắt đầu hoạt động. Vấn đề tồi tệ nhất là không có lỗi / ngoại lệ trong nhật ký.

Bất kỳ ý tưởng về điều này xin vui lòng?


Vấn đề tương tự trên MIUI 11.
AlexS

Câu trả lời:


12

Trong màn hình Thông tin ứng dụng từ ứng dụng Cài đặt hệ thống> Quyền khác> Hiển thị cửa sổ bật lên trong khi chạy ở chế độ nền.

Điều này dường như được giới thiệu trong MIUI 11.

Chỉnh sửa: đây là một đoạn mã mà tôi sử dụng. Tôi thêm nó vào một danh sách cho phép trong 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);
}

CẬP NHẬT: Để kiểm tra xem quyền này có được cấp hay không, bạn có thể sử dụng một dịch vụ đã chạy và khởi chạy một hoạt động trong suốt giả, và trong onCreatecuộc gọi lại LocalBroadcastManagerhoặc tương tự và bạn sẽ biết nó được cấp. Đó là một giải pháp xấu, nhưng nó có thể hữu ích cho một số người.


cảm ơn bạn. Đó thực sự là vấn đề. Có cách nào để yêu cầu sự cho phép này trong ứng dụng không? hoặc thêm nó theo chương trình?
ilker Aktuna

Không ai mà tôi biết. Tôi đang chuyển hướng đến màn hình thông tin ứng dụng và bảo họ kích hoạt nếu họ đang ở MIUI ..
Alex Newman

nhưng để làm được điều đó bạn cần khởi động ứng dụng. bạn làm nó như thế nào ? qua thông báo?
ilker Aktuna

Tôi làm điều đó khi tôi yêu cầu một quyền cần thiết khác khi ứng dụng được định cấu hình lần đầu tiên. Vì vậy, từ ứng dụng chính, không phải dịch vụ.
Alex Newman

1
Thông tin thực sự hữu ích cho MIUI, vì chỉ cấp quyền bắt đầu hoạt động từ Dịch vụ nền sẽ không thay đổi bất kỳ mã nào.
Panache
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.