有没有什么办法可以启动意图进入我的应用的Android通知设置屏幕(如下图所示)?还是一种简单的方法,我可以制作一个PreferenceScreen项目,只需点击此处即可导致此问题?任何方式链接到我的应用程序的Android通知设置?
回答
以下将是Android 5.0(棒棒堂)及以上的工作:
Intent intent = new Intent();
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
//for Android 5-7
intent.putExtra("app_package", getPackageName());
intent.putExtra("app_uid", getApplicationInfo().uid);
// for Android O
intent.putExtra("android.provider.extra.APP_PACKAGE", getPackageName());
startActivity(intent);
注:这不是正式的Android 5-7的支持,但它工作得很好。它是从Android O开始正式支持的。此代码与5.0之前版本的Android不兼容。
太棒了,也可以在棉花糖中使用! –
@shhp - 谢谢你的回答。也可以在N预览中使用。你能说几句话,你是如何找到这个解决方案的?我在这次调查中得到的最远是这条日志消息:'com.android.settings D/SubSettings:启动片段com.android.settings.notification.AppNotificationSettings'时,点击应用程序设置中的“通知”行。 [link2src](https://android.googlesource.com/platform/packages/apps/Settings/+/master/src/com/android/settings/notification/AppNotificationSettings.java) –
@ Dev-iL您将获得第一步。然后我检查了源代码,看看应该在'intent'中加入什么额外的东西:-) – shhp
我用这个代码(奇巧和下一版本):
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Intent intent = new Intent();
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", getActivity().getPackageName());
intent.putExtra("app_uid", getActivity().getApplicationInfo().uid);
startActivity(intent);
} else if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + getActivity().getPackageName()));
startActivity(intent);
}
我合并谢尔盖和Shhp的解决方案来支持所有的案件:
Intent intent = new Intent();
if(android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1){
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("android.provider.extra.APP_PACKAGE", context.getPackageName());
}else if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", context.getPackageName());
intent.putExtra("app_uid", context.getApplicationInfo().uid);
}else {
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + context.getPackageName()));
}
context.startActivity(intent);
我附加通道通知的设置适用于Android 8.0 Oreo API 26或更高版本。有一个来自Android 4.4,KitKat的解决方案。
使用的信道通知设置:
// PRIMARY_CHANNEL:
goToNotificationSettings(getString(R.string.PRIMARY_CHANNEL), mContext);
// SECONDARY_CHANNEL:
goToNotificationSettings(getString(R.string.SECONDARY_CHANNEL), mContext);
用途为App通知设置:
goToNotificationSettings(null, mContext);
goToNotificationSettings的方法:
public void goToNotificationSettings(String channel, Context context) {
Intent intent = new Intent();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (channel != null) {
intent.setAction(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_CHANNEL_ID, channel);
} else {
intent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
}
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
} else if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
} else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", context.getPackageName());
intent.putExtra("app_uid", context.getApplicationInfo().uid);
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + context.getPackageName()));
}
context.startActivity(intent);
}
Settings.ACTION_APP_NOTIFICATION_SETTINGS可从API> = Build.VERSION_CODES.O获得,因此不应在N_MR1上使用https://developer.android.com/reference/android/provider/Settings.html#ACTION_APP_NOTIFICATION_SETTINGS – Ante
public static void goToNotificationSettings(Context context) {
Intent intent = new Intent();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.setData(Uri.fromParts(SCHEME, context.getPackageName(), null));
} else if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", context.getPackageName());
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.putExtra("app_package", context.getPackageName());
intent.putExtra("app_uid", context.getApplicationInfo().uid);
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:" + context.getPackageName()));
} else {
return;
}
context.startActivity(intent);
}
- 1. Android通知频道 - 从系统设置到应用设置的链接
- 2. Android应用程序 - 如何设置OpenFeint通知位置
- 3. 的Android CookieManager setCookie方法并不在我的应用程序设置任何
- 4. 如何链接到应用程序在我的应用程序在Android
- 5. 如何在我的android应用程序中设置多个通知?
- 6. 在设置应用程序中打开应用程序的通知设置
- 7. 如何静态链接sqlite到我的android应用程序?
- 8. 想要通过我的应用程序以编程方式知道应用程序的通知状态
- 9. 我应该在Rails应用程序(或任何MVC应用程序)中放置“通知用户”方法?
- 10. 在C#中的TextView中设置超链接Android应用程序
- 11. 在我的Android应用程序中接收来电通知
- 12. 从我的android应用程序链接到fb应用程序中的页面
- 13. 阅读我的应用程序(在Android 4.2+上)的“显示通知”设置
- 14. 设置链接打开应用程序
- 15. 通过我的应用程序Android共享链接和图像
- 16. 我的Android应用程序共享我的应用程序链接到其他应用程序不起作用
- 17. 访问任何应用程序通知
- 18. 任何推送通知时启动应用程序的方法?
- 19. 将我的应用程序链接到其他应用程序
- 20. 应用程序不支持IE9。任何方式,我可以通过JavaScript通知我的IE9用户?
- 21. 从Android应用程序设置导航到相应的应用程序设置
- 22. 任何方式来从我的应用程序在IOS中打开设置应用程序?
- 23. 无法收到我的Android应用程序后GCM通知
- 24. 我如何知道Android应用程序重新连接到Socket.io?
- 25. 深度链接到Android应用程序
- 26. Android深入链接到应用程序
- 27. 从HTML链接到Android应用程序
- 28. 如何将我的应用程序链接到Windows中的任何文本?
- 29. 如何将我的服务器通知推送到我的Android应用程序?
- 30. 在Android应用程序中设置通知?
它看起来像Settings.ACTION_APPLICATION_DETAILS_SETTINGS会让我进入主应用程序信息屏幕,但我试图进一步进入应用程序信息屏幕上的通知设置... –
虽然我们在@ mohamed-hafez,你能解释你是如何做到的吗?在此处定位此“应用设置”条目?我认为它是通过Manifest中的intent-filter完成的,但是没有做到。谢谢! – Gabriel
@Gabriel,看起来你已经找到了你的问题的答案,但对于任何感兴趣的人,答案是[这里](http://stackoverflow.com/a/28710214/238753)。 – Sam