Trong cài đặt Android, người dùng có thể tắt thông báo nếu họ không muốn. Vậy có phương pháp nào giống như isNotificationAllowed()
để kiểm tra xem ứng dụng của tôi có được phép hiển thị thông báo không? Và làm cách nào để mở trang cài đặt android để hướng dẫn người dùng của tôi bật thông báo?Cách kiểm tra xem ứng dụng của tôi có được phép hiển thị thông báo
Trả lời
EDIT - New trả lời:
Có vẻ như google thêm cuộc gọi API thích hợp: NotificationManagerCompat.from(context).areNotificationsEnabled()
OLD ĐÁP:
Đối với bất cứ ai nhìn vào câu hỏi này, lưu ý NotificationListenerService đó là khác biệt so với "Hiển thị thông báo ". Hai thứ này là những thứ khác nhau! Nếu ứng dụng có quyền truy cập vào NotificationListenerService
không có nghĩa là thông báo của ứng dụng được hiển thị và ngược lại. Để kiểm tra xem người dùng đã bị chặn thông báo từ ứng dụng của bạn hay không, bạn có thể sử dụng phản ánh:
public class NotificationsUtils {
private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
public static boolean isNotificationEnabled() {
AppOpsManager mAppOps = (AppOpsManager) GlobalContext.getContext().getSystemService(Context.APP_OPS_SERVICE);
ApplicationInfo appInfo = GlobalContext.getContext().getApplicationInfo();
String pkg = GlobalContext.getContext().getApplicationContext().getPackageName();
int uid = appInfo.uid;
Class appOpsClass = null; /* Context.APP_OPS_MANAGER */
try {
appOpsClass = Class.forName(AppOpsManager.class.getName());
Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class);
Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION);
int value = (int)opPostNotificationValue.get(Integer.class);
return ((int)checkOpNoThrowMethod.invoke(mAppOps,value, uid, pkg) == AppOpsManager.MODE_ALLOWED);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
}
Nguồn: https://code.google.com/p/android/issues/detail?id=38482
cảm ơn! nó giúp rất nhiều! –
Cảm ơn bạn! Bạn đã cứu ngày của tôi! –
AppOpsManager đã được thêm vào API cấp 19 (Android 4.4), do đó, điều này chỉ có thể được sử dụng cho cấp API 19+ – nibarius
Hãy thử điều này:
Is there a way an app can check if it is allowed to access notifications?
Và có một chút Giải thích ở đây:
Check for access to notifications using NotificationListenerService
Đây là dành cho NotificationListenerService, khác với SHOW NOTIFICATION !!! – Kasra
Hãy thử điều này:
if (Settings.Secure.getString(getActivity().getContentResolver(), "enabled_notification_listeners").contains(getActivity().getPackageName())) {
// Notification access service already enabled
Toast.makeText(getActivity(),"notification enabled",Toast.LENGTH_LONG).show();
} else {
Intent intent = new Intent();
intent.setClassName("com.android.settings", "com.android.settings.Settings$AppNotificationSettingsActivity");
intent.putExtra("app_package", getPackageName());
intent.putExtra("app_uid", getApplicationInfo().uid);
startActivity(intent);
}
Điều này là dành cho NotificationListenerService, khác với SHOW NOTIFICATION !!! – Kasra
NotificationManagerCompat.from(context).areNotificationsEnabled()
vẻ giống như một con đường để đi.
Tôi đã thử nghiệm điều này bằng cách thay đổi thủ công các quyền thông báo trong cài đặt và nó hoạt động tốt, boolean đã được trả lại chính xác trong cả hai trường hợp. Giải pháp một dòng tuyệt vời. Và chỉ trong thời gian .. Tôi đã tìm kiếm các giải pháp chỉ một vài giờ sau khi câu trả lời này đã được đăng .. nên thời gian tốt :) Cảm ơn! – gnB
@gnB đẹp! vui vì nó đã giúp;) – asamoylenko
Đây phải là câu trả lời được chấp nhận +1 – Sniper
- 1. Cách kiểm tra xem Google Street View có sẵn và hiển thị thông báo không?
- 2. Có thể kiểm tra xem thông báo có hiển thị hoặc bị hủy không?
- 3. Làm cách nào để kiểm tra xem ứng dụng của tôi có tập trung không?
- 4. kiểm tra xem người dùng có cho phép ứng dụng sử dụng vị trí của họ
- 5. Cách kiểm tra Thông báo đẩy đang hoạt động trong ứng dụng của tôi
- 6. startForeground() không hiển thị Thông báo của tôi
- 7. Kiểm tra xem QMainWindow của tôi hiện có hiển thị trong Qt
- 8. Làm cách nào để kiểm tra xem hồ sơ cấp phép phân phối iOS có bật thông báo đẩy không?
- 9. Kiểm tra xem phần tử có hiển thị trong div
- 10. JQuery Kiểm tra để xem nếu Div được hiển thị
- 11. Kiểm tra xem ứng dụng IOS của tôi có được cập nhật
- 12. Cách kiểm tra xem WebView có được hiển thị đầy đủ và sẵn sàng không?
- 13. Xác thực ứng dụng khách không hiển thị thông báo
- 14. Android - Hiển thị thông báo nếu không có kết nối internet và tiếp tục kiểm tra
- 15. Cách MVC phù hợp để hiển thị thông báo "không có mục" trong chế độ xem
- 16. Làm cách nào để kiểm tra vị trí ứng dụng của tôi đang sử dụng IDFA
- 17. Làm cách nào để kiểm tra xem Backbone.View có được hiển thị trong DOM không?
- 18. Kiểm tra xem bàn phím mềm có hiển thị bằng cách sử dụng espresso
- 19. Cách hiển thị Cửa sổ thông báo của Android Studio?
- 20. Làm cách nào để kiểm tra xem ứng dụng của tôi có được đặt mặc định hay không trong Android?
- 21. Cách kiểm tra xem ứng dụng có ở tiền cảnh hay nền
- 22. Kiểm tra kết nối cơ sở dữ liệu, nếu không hiển thị thông báo
- 23. Kiểm tra xem cookie có được đặt
- 24. Tắt thông báo xóa cho ứng dụng của tôi
- 25. Cách kiểm tra xem JCheckBox có được kiểm tra không?
- 26. Cách xác định xem ứng dụng Android có mở từ Thông báo thông báo không?
- 27. Tôi có cần hiển thị giấy phép apache trong ứng dụng của mình khi sử dụng điện thoại không?
- 28. Selenium - kiểm tra xem hình ảnh có được hiển thị trên trang
- 29. Kiểm tra xem tệp có đang được sử dụng hay ứng dụng nào không?
- 30. Ứng dụng ASP.NET MVC nào của tôi nên kiểm tra thông tin thành viên?
Điều này có thể giúp bạn: http://stackoverflow.com/questions/24145343/checking-android-system-security-notification-access-setting-programmatically – TheTanic
có thể trùng lặp của [Android 4.1: Làm thế nào để kiểm tra thông báo là bị vô hiệu hóa cho ứng dụng?] (http://stackoverflow.com/questions/11649151/android-4-1-how-to-check-notifications-are-disabled-for-the-application) – Sam