123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package com.jyc.threegames.utils;
- import android.app.AppOpsManager;
- import android.app.Notification;
- import android.app.NotificationChannel;
- import android.app.NotificationManager;
- import android.content.Context;
- import android.content.Intent;
- import android.content.pm.ApplicationInfo;
- import android.graphics.BitmapFactory;
- import android.graphics.Color;
- import android.net.Uri;
- import android.os.Build;
- import android.provider.Settings;
- import androidx.core.app.NotificationCompat;
- import com.jyc.threegames.R;
- import java.lang.reflect.Field;
- import java.lang.reflect.Method;
- import static android.content.Context.NOTIFICATION_SERVICE;
- public class NotificationUtils {
- public static Notification GET_NOTIFICATION(Context context, String tittle, String body){
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
- NotificationChannel channel =new NotificationChannel("three_game_important",
- "three_game", NotificationManager.IMPORTANCE_HIGH);
- // channel.enableLights(true);
- // channel.setLightColor(Color.RED);
- // channel.setShowBadge(true);
- ((NotificationManager)context.getSystemService(NOTIFICATION_SERVICE)).createNotificationChannel(channel);
- }
- NotificationCompat.Builder build = new NotificationCompat.Builder(context, "three_game_important");
- build.setContentTitle(tittle);
- build.setContentText(body);
- build.setTicker(tittle);
- // if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
- // build.setPriority(NotificationManager.IMPORTANCE_MAX);
- // else
- // build.setPriority(Notification.PRIORITY_HIGH);
- // build.setAutoCancel(true);
- // build.setWhen(System.currentTimeMillis());
- // build.setDefaults(Notification.DEFAULT_ALL);
- build.setSmallIcon(R.mipmap.ic_launcher);
- // build.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
- return build.build();
- }
- private static final String CHECK_OP_NO_THROW = "checkOpNoThrow";
- private static final String OP_POST_NOTIFICATION = "OP_POST_NOTIFICATION";
- public static boolean IS_NOTIFICATION_ENABLE(Context context) {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- ///< 8.0手机以上
- if (((NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE)).getImportance() == NotificationManager.IMPORTANCE_NONE) {
- return false;
- }
- }
- AppOpsManager mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
- ApplicationInfo appInfo = context.getApplicationInfo();
- String pkg = context.getApplicationContext().getPackageName();
- int uid = appInfo.uid;
- Class appOpsClass = null;
- 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 = (Integer) opPostNotificationValue.get(Integer.class);
- return ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED);
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
- public static void REQUEST_NOTIFY(Context context) {
- /**
- * 跳到通知栏设置界面
- * @param context
- */
- Intent localIntent = new Intent();
- ///< 直接跳转到应用通知设置的代码
- if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- localIntent.setAction(Settings.ACTION_APP_NOTIFICATION_SETTINGS);
- localIntent.putExtra(Settings.EXTRA_APP_PACKAGE, context.getPackageName());
- }
- else if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP &&
- android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
- localIntent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
- localIntent.putExtra("app_package", context.getPackageName());
- localIntent.putExtra("app_uid", context.getApplicationInfo().uid);
- } else if (android.os.Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) {
- localIntent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
- localIntent.addCategory(Intent.CATEGORY_DEFAULT);
- localIntent.setData(Uri.parse("package:" + context.getPackageName()));
- } else {
- ///< 4.4以下没有从app跳转到应用通知设置页面的Action,可考虑跳转到应用详情页面,
- localIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- if (Build.VERSION.SDK_INT >= 9) {
- localIntent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
- localIntent.setData(Uri.fromParts("package", context.getPackageName(), null));
- } else if (Build.VERSION.SDK_INT <= 8) {
- localIntent.setAction(Intent.ACTION_VIEW);
- localIntent.setClassName("com.android.settings", "com.android.setting.InstalledAppDetails");
- localIntent.putExtra("com.android.settings.ApplicationPkgName", context.getPackageName());
- }
- }
- context.startActivity(localIntent);
- }
- }
|