当前位置: 首页 > 面试题库 >

清除并设置默认的家庭应用程序

凤高翰
2023-03-14
问题内容

Nova在世界上是如何管理的?我实际上是在尝试做完全相同的事情:为用户提供一个按钮,以按清除并选择他们的新默认启动器。

我可以获取默认应用名称并显示它:

       private String getPrefered(Intent i) {
       PackageManager pm = this.getActivity().getPackageManager();
       final ResolveInfo mInfo = pm.resolveActivity(i, 0);
       return (String) pm.getApplicationLabel(mInfo.activityInfo.applicationInfo);
   }

这里Intent i

Intent home = new Intent("android.intent.action.MAIN");
        home.addCategory("android.intent.category.HOME");

然后我调用系统ResolveActivity,

private void makePrefered() {
       Intent selector = new Intent("android.intent.action.MAIN");
       selector.addCategory("android.intent.category.HOME");                          
       selector.setComponent(new ComponentName("android", "com.android.internal.app.ResolverActivity"));
       startActivity(selector);
   }

选择器启动并正常运行,但实际上并未设置或清除任何值。在调试它时,好像我缺少一些额外功能吗?当我调用该makePrefered方法时,会收到以下日志消息,

I/ActivityManager(  602): START {act=android.intent.action.MAIN cat=[android.intent.category.HOME] cmp=android/com.android.internal.app.ResolverActivity u=0} from pid 22641

当我使用Nova实施时,我看到了所有这些,

    I/PackageManager(  602): Result set changed, dropping preferred activity for Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 (has extras) } type null
I/ActivityManager(  602): START {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=android/com.android.internal.app.ResolverActivity (has extras) u=0} from pid 22905
I/ActivityManager(  602): START {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.mycolorscreen.canvas/.Launcher (has extras) u=0} from pid 22905
  1. 我如何才能到达那里,查看随同捆绑包一起发送的内容?
  2. 我如何才能清除首选应用html" target="_blank">程序?不要告诉我你不能,我已经看到足够多的答案了。Nova做到了,而且完全按照我想要的方式做到了。

问题答案:

实际上,执行此操作的代码只是一个非常聪明的解决方法。

当一个组件

        <category android:name="android.intent.category.HOME" />

启用后,通常会通过安装新的家庭应用程序来清除默认家庭应用程序。

通过这样使用home组件创建一个空的活动来利用这一点。

<activity
            android:name="com.t3hh4xx0r.haxlauncher.FakeHome"
            android:enabled="false">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>

当您要设置新的默认值时,请启用此组件,然后调用归属意图,然后再次禁用伪造的宿主组件。

public static void makePrefered(Context c) {
       PackageManager p = c.getPackageManager();
       ComponentName cN = new ComponentName(c, FakeHome.class);
       p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);

       Intent selector = new Intent(Intent.ACTION_MAIN);
       selector.addCategory(Intent.CATEGORY_HOME);            
       c.startActivity(selector);

       p.setComponentEnabledSetting(cN, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
   }

最终结果是系统认为安装了新的家庭应用程序,因此清除了默认设置,使您无需特殊权限即可设置自己的应用程序。

感谢TeslaCoil和NovaLauncher的Kevin提供有关如何完成此操作的信息!



 类似资料:
  • 我有两个函数,递增速度和递减速度。它们都使用clearInterval()然后使用setInterval,但是有些地方不正确。 降低速度将我的速度从1000降到5000,但是如果我使用该功能,速度将增加10-20倍,看起来更像是100-500毫秒。另外,如果我使用increaseSpeed将速度提高到50毫秒,然后使用decreaseSpeed,decreaseSpeed将不会有任何效果。 这是设

  • 我的类路径中有多个应用服务器,即通过spring-boot-starter-webflux的Netty和通过另一个依赖链的Tomcat。我如何确定在Spring Boot使用哪个应用服务器? 目前,Tomcat正在取代Netty启动。 重要提示:我不能排除任何一个,Tomcat是CXF用的,Netty是WebClient用的。

  • 本文向大家介绍android Launcher3设置默认桌面应用,包括了android Launcher3设置默认桌面应用的使用技巧和注意事项,需要的朋友参考一下 android Launcher3 设置默认桌面应用,供大家参考,具体内容如下 launcher3 的默认桌面应用是在 res/xml里 默认有4种样式 default_workspace_3x3.xml default_workspa

  • 中找到默认的setter。我使用的命令是根目录下的,其中pom位于。 我根本没有配置组,也没有任何特殊的配置。无论我完全忽略pom中的插件,将其添加到报告中,还是添加为构建插件,都会遇到同样的错误。我也尝试过添加空组,虽然消息有所改变,但它仍然会出现。 我遇到了这个SO问题,但是a.我没有TestNG依赖关系,b.我没有使用命令行参数,c.它从未解决。 这是一个硒项目,所以我想可能有类似的东西,但

  • 什么是Locale Locale是一组描述世界上某一特定区域文本格式和语言习惯的设置的集合。locale名通常由三个部分组成:第一部分,是一个强制性的,表示语言的缩写,例如"en"表示英文或"zh"表示中文。第二部分,跟在一个下划线之后,是一个可选的国家说明符,用于区分讲同一种语言的不同国家,例如"en_US"表示美国英语,而"en_UK"表示英国英语。最后一部分,跟在一个句点之后,是可选的字符集

  • WeBWorK 是一个用 Perl 语言开发的,用来给学生布置家庭作业的系统,基于Web。