Tôi đang cố gắng xác định ứng dụng hiện đang hiển thị cho người dùng. Để làm như vậy, tôi sử dụng phương thức activityManager.getRunningAppProcesses()
.Nhận quy trình tiền cảnh (thực) bằng cách sử dụng activityManager.getRunningAppProcesses()
Tôi biết rằng phương pháp này không được hỗ trợ như tắt Android 5.1.1 - điều này là ổn.
Ban đầu nó hoạt động như sự quyến rũ, tôi đang lặp qua danh sách của RunningAppProcessInfos và kiểm tra mức độ quan trọng.
tl; dr Phương pháp chính xác để nhận quy trình tiền cảnh hiện tại và ngăn chặn các bài đăng sai là gì? Thứ tự của danh sách được thực hiện như thế nào - API nói rằng nó không được chỉ định. Có cách nào để đặt hàng chính xác không?
Những gì tôi đã làm:
Thật không may là danh sách được trả về bởi các ActivityManager là khác nhau trên mọi thiết bị. Một số thiết bị trả về nhiều infos với tầm quan trọng 100 (là FOREGROUND), ngay cả khi quá trình này hiện không hiển thị.
Điều này đã gây ra sự cố mà tôi đã gặp phải rất nhiều phản hồi tích cực. Ví dụ, tôi đã thử nghiệm nó với facebook và tạo ra một bánh mì nướng, mỗi khi facebook ở phía trước. Tôi đã chuyển sang Trang chủ, vì vậy trình khởi chạy của tôi cần có là quy trình nền trước. Đã 10 giây, sau đó, facebook xuất hiện với tầm quan trọng FOREGROUND trong danh sách một lần nữa (nó không mở cũng không nhìn thấy được) và tôi nhận được một kết quả dương tính giả.
Tôi nhận ra rằng một số thiết bị đặt hàng danh sách theo quy trình gần đây ở trên cùng. Vì vậy, tôi quyết định thử các phương pháp sau đây:
ActivityManager.RunningAppProcessInfo appProcess = appProcesses.get(0);
final String processName = appProcess.processName;
final String packageName = removeProcessSuffix(processName);
if (appProcess.importance == FOREGROUND || appProcess.importance == VISIBLE){
//do something, like the toast
}
Với appProcesses.get (0); Tôi chỉ kiểm tra yếu tố đầu tiên và lỗi đã biến mất. Không có kết quả dương tính giả nữa.
Nhưng, giờ đây trên một số thiết bị, tôi không còn nhận được tiến trình nền trước nữa. Bởi vì họ không yêu cầu danh sách theo bất kỳ cách nào. Ví dụ: 4.2 điện thoại thông minh Sony là một số ứng viên. Tôi nhận được danh sách, nhưng quá trình thực sự hiện có thể nhìn thấy là ở chỉ số 11 hoặc hơn.
Tôi không biết phải làm gì, để có được tiến trình nền trước hiện tại, không có kết quả dương tính giả.
Phương pháp chính xác để nhận quy trình tiền cảnh hiện tại và ngăn chặn các bài đăng sai là gì? Thứ tự của danh sách được thực hiện như thế nào - API nói rằng nó không được chỉ định. Có cách nào để đặt hàng chính xác không?
Cảm ơn!
Điều này có vẻ như một sự lừa đảo của http://stackoverflow.com/questions/2166961/determining-the-current-foreground-application-from-a-background-task-or-service – alzee
Tôi chưa thử nghiệm, nhưng Điều này có vẻ như nó sẽ giúp bạn: http://stackoverflow.com/a/33886313/4973904 –
@ ÁlissonMorais Vâng, cảm ơn đầu tiên cho phản ứng, nhưng bạn đã đọc câu hỏi hoàn chỉnh chưa? Tôi không thể sử dụng mục đầu tiên của danh sách trả về chỉ vì trên 30% thiết bị, danh sách không được sắp xếp. – JacksOnF1re