解决华为手机Android系统10.0不能隐藏桌面图标问题,全网唯一

Android技术 专栏收录该内容
9 篇文章 0 订阅

       在Android系统10.0之后对应用隐藏图标做了严格的限制,Android官网的意思就是,除非是系统应用或者是不含Android四大组件并且没有申请任何权限的app才能隐藏图标。内心一阵独白:这特么的还不如直接说不让隐藏图标!

       作为Android开发人的我们,能答应么,绝bi不能答应,找办法,全网的搜,大部分都是一个解决方法,就是将图标想方设法弄成全透明的,这个办法有风险不说,实质并未隐藏,在桌面还在占着一个图标位置。怎么办,想别的办法吧,偶然的机会在国外一个技术论坛上发现一个叫jork的哥们儿分享了一个小app,目的是打开部分华为手机的隐藏桌面(华为手机再某款之后基本关闭了隐藏桌面这个功能)。如沐春风,照着这个方向,继续奋斗,终于搞出一个小程序,可以打开已经被厂商关闭的隐藏煮面的功能,不说废话了,直接上代码!

       核心内容在华为的EMUI系统中,有个存储各种开关功能的库,有对外提供的数据接口,库名字叫:content://settings/system,里面表3个字段很简单_id,name,value,id不用说,name是表示哪个功能,value是表示设置的值。我们打印一下都有那些数据,

String id=cursor.getString(cursor.getColumnIndex("_id"));
String name=cursor.getString(cursor.getColumnIndex("name"));
String value=cursor.getString(cursor.getColumnIndex("value"));
System.out.println("id="+id+"-----name="+name+"-----value="+value);

有很多数据,对应打开隐藏桌面,只有一个数据有用,hw_launcher_hide_apps,将这个字段值设置为true,代码如下

ContentValues var5 = new ContentValues(2);
var5.put("name", "hw_launcher_hide_apps");
var5.put("value", "true");
var0.getContentResolver().bulkInsert(Uri.parse("content://settings/system"), new ContentValues[]{var5});

 

这样,你的隐藏桌面图标的功能就又打开了,一般是两个手指从屏幕中间同时向外滑动,就会弹出这个界面

然后添加你要隐藏的应用就可以,再次回到桌面,桌面上已经没有我们的app的图标了,好了,这样就算曲线完工了。

特别提示

上面几段代码需要几个权限

<uses-permission android:name="android.permission.WRITE_SETTINGS" />

<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

这两个权限在Android api22以上是无法生效的,所以,我们这段代码需要将 targetSdkVersion 设置为22,

完整代码如下,

1、工具类

public class HUAWEISDK22 {

    public static boolean setPrefDbValue(Context var0, String var1, String var2, String var3) {
        try {
            ContentValues var5 = new ContentValues(2);
            var5.put("name", var2);
            var5.put("value", var3);
            var0.getContentResolver().bulkInsert(Uri.parse("content://settings/system"), new ContentValues[]{var5});
            return true;
        } catch (Exception var4) {
            Log.e("setSystemDbValue", var4.getMessage());
            return false;
        }
    }

    public static void getDbValue(Context var0) {
        try {
            Cursor cursor =var0.getContentResolver().query(Uri.parse("content://settings/system"), null,null,null,null);
            cursor.getCount();
            while(cursor.moveToNext()) {
                String id=cursor.getString(cursor.getColumnIndex("_id"));
                String name=cursor.getString(cursor.getColumnIndex("name"));
                String value=cursor.getString(cursor.getColumnIndex("value"));
                System.out.println("id="+id+"-----name="+name+"-----value="+value);
            }
            cursor.close();
        } catch (Exception var4) {
            Log.e("setSystemDbValue", var4.getMessage());
        }
    }

2、调用实例

HUAWEISDK22.setPrefDbValue(WifiActivity.this.getApplicationContext(), "system", "hw_launcher_hide_apps", "true");

好了,今天就到了,欢迎各位大佬指正。

转载请注明原地址和作者,多谢!

  • 0
    点赞
  • 4
    评论
  • 3
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

校长团

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值