Просмотр исходного кода

尝试判断是否添加快捷方式成功

zengjiebin лет назад: 7
Родитель
Сommit
6d8e696f93

+ 11 - 0
app/src/main/java/com/sheep/gamegroup/model/entity/DialogConfig.java

@@ -33,6 +33,7 @@ public class DialogConfig {
     private boolean cancelable = true;//默认可以取消对话框,并显示close图标
     private boolean isFinish;
     private boolean btnLeftNotDissDialog;
+    private boolean btnRightNotDissDialog;
     private int msgGravity;
 
     private Map<String, String> colorMsgMap = new HashMap<>();
@@ -205,6 +206,16 @@ public class DialogConfig {
         this.btnLeftNotDissDialog = btnLeftNotDissDialog;
         return this;
     }
+
+    public boolean isBtnRightNotDissDialog() {
+        return btnRightNotDissDialog;
+    }
+
+    public DialogConfig setBtnRightNotDissDialog(boolean btnRightNotDissDialog) {
+        this.btnRightNotDissDialog = btnRightNotDissDialog;
+        return this;
+    }
+
     private int layoutId = R.layout.x_msg_dialog;
     public int getLayoutId() {
         return layoutId;

+ 65 - 2
app/src/main/java/com/sheep/gamegroup/util/SysAppUtil.java

@@ -5,14 +5,17 @@ import android.app.Dialog;
 import android.app.PendingIntent;
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
+import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
+import android.content.pm.ProviderInfo;
 import android.content.pm.ResolveInfo;
 import android.content.pm.ShortcutInfo;
 import android.content.pm.ShortcutManager;
+import android.database.Cursor;
 import android.graphics.BitmapFactory;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
@@ -22,6 +25,7 @@ import android.provider.AlarmClock;
 import android.provider.Settings;
 import android.text.TextUtils;
 import android.text.format.Formatter;
+import android.util.Log;
 import android.view.Gravity;
 import android.view.View;
 import android.widget.TextView;
@@ -69,6 +73,7 @@ import java.util.ArrayList;
 import java.util.Calendar;
 import java.util.List;
 import java.util.Locale;
+import java.util.regex.Pattern;
 
 import androidx.annotation.RequiresApi;
 import io.reactivex.Observable;
@@ -881,7 +886,8 @@ public class SysAppUtil {
     //展示提示框
     private static void showShortcutTip(Activity activity) {
         ViewUtil.showMsgDialog(activity, new DialogConfig().setTitle("已尝试添加有范商城到桌面").setMsg("若添加失败,请前往系统设置为小绵羊打开\"创建桌面快捷方式\"的权限")
-                .setBtnLeftText("取消").setBtnRightText("前往设置").setBtnRightOnClickListener(view -> {
+                .setBtnLeftText("重新添加").setBtnLeftOnClickListener(view -> CommonUtil.getInstance().addYouFanLauncher())
+                .setBtnRightText("前往设置").setBtnRightOnClickListener(view -> {
                     try {
                         startAppSettings(activity);
                     } catch (NoSuchFieldException e) {
@@ -893,7 +899,7 @@ public class SysAppUtil {
                         if(TestUtil.isDev())
                             G.showToast(e);
                     }
-                }));
+                }).setBtnRightNotDissDialog(true));
     }
 
     class CallBackReceiver extends BroadcastReceiver {
@@ -953,4 +959,61 @@ public class SysAppUtil {
         intent.setClass(activity, yfCls);
         return intent;
     }
+
+
+
+
+    //是否有快捷方式的权限
+    public static boolean hasShortcut(Context context, String appName) {
+        LogUtil.println("hasShortcut appName = " + appName);
+        long start = System.currentTimeMillis();
+        String authority = getAuthorityFromPermission(context);
+        if (authority == null) {
+            return false;
+        }
+        long end = System.currentTimeMillis() - start;
+        Log.e("Finals", end + "  eee");
+        String url = "content://" + authority + "/favorites?notify=true";
+        Cursor cursor = null;
+        try {
+            Uri CONTENT_URI = Uri.parse(url);
+            ContentResolver contentResolver = context.getContentResolver();
+            if(contentResolver != null) {
+                cursor = contentResolver.query(CONTENT_URI, null, " title= ? ", new String[]{appName}, null);
+                if (cursor != null && cursor.moveToNext()) {
+                    return true;
+                }
+            }
+        } catch (Exception ignore) {
+        } finally {
+            if(cursor != null){
+                cursor.close();
+            }
+        }
+        return false;
+    }
+
+    private static String getAuthorityFromPermission(Context context) {
+        // 先得到默认的Launcher
+        Intent intent = new Intent(Intent.ACTION_MAIN);
+        intent.addCategory(Intent.CATEGORY_HOME);
+        PackageManager mPackageManager = context.getPackageManager();
+        ResolveInfo resolveInfo = mPackageManager.resolveActivity(intent, 0);
+        if (resolveInfo == null) {
+            return null;
+        }
+        List<ProviderInfo> info = mPackageManager.queryContentProviders(resolveInfo.activityInfo.packageName, resolveInfo.activityInfo.applicationInfo.uid, PackageManager.GET_PROVIDERS);
+        if (info != null) {
+            for (int j = 0; j < info.size(); j++) {
+                ProviderInfo provider = info.get(j);
+                if (provider.readPermission == null) {
+                    continue;
+                }
+                if (Pattern.matches(".*launcher.*READ_SETTINGS", provider.readPermission)) {
+                    return provider.authority;
+                }
+            }
+        }
+        return null;
+    }
 }

+ 4 - 6
app/src/main/java/com/sheep/gamegroup/util/TestUtil.java

@@ -1,6 +1,5 @@
 package com.sheep.gamegroup.util;
 
-import android.Manifest;
 import android.app.Activity;
 import android.app.Notification;
 import android.app.NotificationChannel;
@@ -29,7 +28,6 @@ import android.widget.TextView;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
-import com.allen.android.lib.PermissionUtils;
 import com.bumptech.glide.Glide;
 import com.kfzs.cfyl.share_library.util.CallBackAPI;
 import com.kfzs.duanduan.utils.ApkUtils;
@@ -266,7 +264,7 @@ public class TestUtil {
      */
     public static void test(final Activity activity) {
         final String[] items = {"复制token", "添加token", "复制打点数据", "从jenkins下载小绵羊安装包", "测试表情包",
-                "判断是否有快捷权限",
+                "判断是否添加商城快捷入口",
                 "跳转QQ", "跳转QQ群", "尝试获取通讯录", "测试有范","测试有范6.0","测试有范7.0","测试有范8.0", "测试设备信息", "下载视频测试", "爱奇艺VIP会员", "分享我的签名的小绵羊apk", "分享当前小绵羊apk",
                 "测试升级对话框", "少数民族姓名", "开启皮肤", "不开启皮肤", "我的游戏", "优惠券弹窗", "填写收件地址弹窗",
                 "朗读文字", "游戏搜索", "测试插件", "测试bitmap", "剪切视频", "我的关注", "足迹",
@@ -292,9 +290,9 @@ public class TestUtil {
             return;
         }
         switch (item) {
-            case "判断是否有快捷权限":
-                boolean hasPermission = PermissionUtils.hasPermission(activity, Manifest.permission.INSTALL_SHORTCUT);
-                G.showToast(hasPermission ? "有权限": "无权限");
+            case "判断是否添加商城快捷入口":
+                boolean hasShortcut = SysAppUtil.hasShortcut(SheepApp.getInstance(), Config.YF_SHOP_NAME);
+                G.showToast((hasShortcut ? "已经": "还未") + Config.YF_SHOP_NAME + "桌面快捷入口");
                 break;
             case "尝试获取通讯录":
                 ContactUtil.getAllContactList(G::showToast);

+ 10 - 15
app/src/main/java/com/sheep/gamegroup/util/ViewUtil.java

@@ -1236,15 +1236,12 @@ public class ViewUtil {
             dialog_btn_left.setVisibility(isLeftBtnShow ? View.VISIBLE : View.GONE);
             if (!TextUtils.isEmpty(btnLeftText))
                 dialog_btn_left.setText(btnLeftText);
-            dialog_btn_left.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    if (btnLeftOnClickListener != null) {
-                        btnLeftOnClickListener.onClick(v);
-                    }
-                    if (!dialogConfig.isBtnLeftNotDissDialog())
-                        dialog.dismiss();
+            dialog_btn_left.setOnClickListener(v -> {
+                if (btnLeftOnClickListener != null) {
+                    btnLeftOnClickListener.onClick(v);
                 }
+                if (!dialogConfig.isBtnLeftNotDissDialog())
+                    dialog.dismiss();
             });
         }
 
@@ -1260,14 +1257,12 @@ public class ViewUtil {
             dialog_btn_right.setVisibility(isRightBtnShow ? View.VISIBLE : View.GONE);
             if (!TextUtils.isEmpty(btnRightText))
                 dialog_btn_right.setText(btnRightText);
-            dialog_btn_right.setOnClickListener(new View.OnClickListener() {
-                @Override
-                public void onClick(View v) {
-                    if (btnRightOnClickListener != null) {
-                        btnRightOnClickListener.onClick(v);
-                    }
-                    dialog.dismiss();
+            dialog_btn_right.setOnClickListener(v -> {
+                if (btnRightOnClickListener != null) {
+                    btnRightOnClickListener.onClick(v);
                 }
+                if (!dialogConfig.isBtnRightNotDissDialog())
+                    dialog.dismiss();
             });
         }
 

+ 3 - 1
app/src/main/java/com/sheep/gamegroup/view/activity/ActWebX5.java

@@ -31,6 +31,7 @@ import com.sheep.gamegroup.util.Jump2View;
 import com.sheep.gamegroup.util.LogUtil;
 import com.sheep.gamegroup.util.NetUtil;
 import com.sheep.gamegroup.util.StringUtils;
+import com.sheep.gamegroup.util.SysAppUtil;
 import com.sheep.gamegroup.util.TestUtil;
 import com.sheep.gamegroup.util.ViewUtil;
 import com.sheep.gamegroup.util.js.BaseActWeb;
@@ -129,7 +130,8 @@ public class ActWebX5 extends BaseActWeb {
     private void checkWebParams(WebParams webParams) {
         if(webParams.getUrl().startsWith(Config.YF_SHOP_HOME_SHEEP.split("\\?")[0]) || webParams.getUrl().startsWith(Config.YF_SHOP_HOME_SHEEP_TEST.split("\\?")[0])) {//检测是否是有范商城地址
             boolean isIgnore = SpUtils.getAsBoolean(KEY_IGNORE_ADD_YOU_FAN_LAUNCHER, false);
-            if (!isIgnore && !CommonUtil.getInstance().hasYouFanLauncher()) {//未忽略并且没有添加有范商品入口
+            boolean hasShortcut = SysAppUtil.hasShortcut(SheepApp.getInstance(), Config.YF_SHOP_NAME);
+            if (!hasShortcut && !isIgnore && !CommonUtil.getInstance().hasYouFanLauncher()) {//未忽略并且没有添加有范商品入口
                 ViewUtil.showMsgDialog(this, new DialogConfig().setTitle("温馨提示")
                         .setMsg("亲,喜欢的话,就添加一个商城的桌面快捷入口吧!(点击否将不再提示)")
                         .setBtnLeftText("否").setBtnLeftOnClickListener(view -> SpUtils.putAsBoolean(KEY_IGNORE_ADD_YOU_FAN_LAUNCHER, true))