Forráskód Böngészése

添加推送通知提示框

yang_div 8 éve
szülő
commit
ac3d1559e7

+ 32 - 0
app/src/main/java/com/kfzs/duanduan/fragment/FgtSmallSheep.java

@@ -2,11 +2,13 @@ package com.kfzs.duanduan.fragment;
 
 import android.app.Activity;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.support.v4.view.ViewPager;
 import android.support.v4.widget.SwipeRefreshLayout;
+import android.support.v7.app.AlertDialog;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
@@ -32,6 +34,7 @@ import com.bumptech.glide.request.RequestOptions;
 import com.kfzs.duanduan.BaseCompatFragment;
 import com.kfzs.duanduan.event.BigEvent;
 import com.kfzs.duanduan.react.ReactUtil;
+import com.kfzs.duanduan.react.SharedPreferences;
 import com.sheep.gamegroup.absBase.BaseActivity;
 import com.sheep.gamegroup.di.components.DaggerSmallSheepComponent;
 import com.sheep.gamegroup.di.modules.SmallSheepModule;
@@ -69,6 +72,7 @@ import com.sheep.gamegroup.util.MyListview;
 import com.sheep.gamegroup.util.PreferenceUtils;
 import com.sheep.gamegroup.util.TestUtil;
 import com.sheep.gamegroup.util.UMConfigUtils;
+import com.sheep.gamegroup.view.activity.NotificationsUtils;
 import com.sheep.gamegroup.view.adapter.AdpHomeListGrideview;
 import com.sheep.gamegroup.view.adapter.AdpHomeListListview;
 import com.sheep.gamegroup.view.adapter.TryMakeMoneyAdp;
@@ -204,6 +208,7 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
     @Override
     protected void initView(Bundle savedInstanceState) {
         setContentView(R.layout.homepage_act_layout);
+        showPDialog();
         initView();
         initListener();
         TestUtil.testChange(getActivity(), (TextView) getViewById(R.id.test_change));
@@ -952,4 +957,31 @@ public class FgtSmallSheep extends BaseCompatFragment implements SmallSheepContr
 
 
     }
+
+    /**
+     * 提示用户开启推送通知权限
+     * 1)只提示一次,如果用户取消,以后都不在提示
+     */
+    private void showPDialog(){
+       boolean isShowDialog = SharedPreferences.getInstance().getBoolean("isShowDialog",true);
+        if(isShowDialog && !NotificationsUtils.isNotificationEnabled(mContext)){//没有开启通知权限
+            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
+            builder.setTitle("提示");
+            builder.setMessage("是否开启推送?");
+            builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
+                @Override
+                public void onClick(DialogInterface dialog, int which) {
+                    SharedPreferences.getInstance().putBoolean("isShowDialog",false);
+                }
+            });
+            builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
+                @Override
+                public void onClick(DialogInterface dialogInterface, int i) {
+                    NotificationsUtils.goToNotificationSetting(mContext);
+                }
+            });
+            builder.show();
+        }
+
+    }
 }

+ 72 - 0
app/src/main/java/com/sheep/gamegroup/view/activity/NotificationsUtils.java

@@ -0,0 +1,72 @@
+package com.sheep.gamegroup.view.activity;
+
+import android.app.AppOpsManager;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ApplicationInfo;
+import android.net.Uri;
+import android.os.Build;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+
+/**
+ * Created by Administrator on 2017/8/25 0025.
+ */
+
+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(Context context) {
+        boolean Enabled;
+        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
+            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);
+                Enabled = ((Integer) checkOpNoThrowMethod.invoke(mAppOps, value, uid, pkg) == AppOpsManager.MODE_ALLOWED);
+
+            } catch (Exception e) {
+                e.printStackTrace();
+                Enabled = false;
+            }
+        }else{
+            Enabled = true;
+        }
+
+        return Enabled;
+    }
+
+    /**
+     * 打开允许通知的设置页
+     */
+    public static void goToNotificationSetting(Context context) {
+        Intent intent = new Intent();
+        if (Build.VERSION.SDK_INT >= 26) {
+            // android 8.0引导
+            intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
+            intent.putExtra("android.provider.extra.APP_PACKAGE", context.getPackageName());
+        } else if (Build.VERSION.SDK_INT >= 21) {
+            // android 5.0-7.0
+            intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
+            intent.putExtra("app_package", context.getPackageName());
+            intent.putExtra("app_uid", context.getApplicationInfo().uid);
+        } else {
+            // 其他
+            intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");
+            intent.setData(Uri.fromParts("package", context.getPackageName(), null));
+        }
+        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        context.startActivity(intent);
+    }
+}