Vin*_*tti 3 notifications android
我有一个要求,我需要以编程方式启用和禁用 App Info 的“显示通知”。我在谷歌上搜索了很长时间,但找不到合适的解决方案。这是否可以在 android 中以编程方式打开/关闭“显示通知”?提前致谢。
实际上,没有办法以编程方式打开/关闭通知,我们可以使用以下代码执行此操作的唯一方法。
public class CustomToast {
private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
public static void makeText(Context mContext, String message, int time) {
if (isNotificationEnabled(mContext)) {
//Show Toast message
Toast.makeText(mContext, message, time).show();
} else {
// Or show own custom alert dialog
showCustomAlertDialog(mContext, message);
}
}
private static boolean isNotificationEnabled(Context mContext) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
AppOpsManager mAppOps = (AppOpsManager) mContext.getSystemService(Context.APP_OPS_SERVICE);
ApplicationInfo appInfo = mContext.getApplicationInfo();
String pkg = mContext.getApplicationContext().getPackageName();
int uid = appInfo.uid;
Class appOpsClass;
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 | NoSuchMethodException | NoSuchFieldException
| InvocationTargetException | IllegalAccessException ex) {
Utils.logExceptionCrashLytics(ex);
}
return false;
} else {
return false;
}
}
private static void showCustomAlertDialog(Context mContext, String message) {
if (!(mContext instanceof Activity && ((Activity)mContext).isFinishing())) {
AlertDialog.Builder mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setMessage(message);
mBuilder.setPositiveButton(mContext.getString(R.string.ok),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
mBuilder.setCancelable(true);
AlertDialog alertDialog = mBuilder.create();
alertDialog.show();
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12229 次 |
| 最近记录: |