在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");
好了,今天就到了,欢迎各位大佬指正。
转载请注明原地址和作者,多谢!