如何启用和禁用组件?

sci*_*bor 9 android

我最初的问题基本上是这样的:清除和设置默认的家庭应用程序

我很满意地回答了这个问题,但是我在答案中难以理解的是你如何在java代码中启用然后禁用清单中的组件?

Paw*_*dav 19

通过使用包管理器,您可以启用或禁用在清单文件中声明的组件有两个标志PackageManager.COMPONENT_ENABLED_STATE_DISABLED用于禁用组件,PackageManager.COMPONENT_ENABLED_STATE_ENABLED用于启用组件.

   PackageManager pm  = getApplicationContext().getPackageManager();
   ComponentName componentName = new ComponentName("com.app",
         ".broadcast_receivers.OnNetworkChangedReceiver");
      pm.setComponentEnabledSetting(componentName,
        PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
        PackageManager.DONT_KILL_APP);
Run Code Online (Sandbox Code Playgroud)

Android清单:

<receiver android:name=".broadcast_receivers.OnNetworkChangedReceiver"
            android:enabled="true">
        <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

官方文档:setComponentEnabledSetting


Noa*_*gev 2

采用 Pawan 方法进行更通用的实施:

public static void setComponentState(Context context, String packageName , String componentClassName, boolean enabled)
{
    PackageManager pm  = context.getApplicationContext().getPackageManager();
    ComponentName componentName = new ComponentName(packageName, componentClassName);
    int state = enabled ?  PackageManager.COMPONENT_ENABLED_STATE_ENABLED :  PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
    pm.setComponentEnabledSetting(componentName,
            state,
            PackageManager.DONT_KILL_APP);

}
Run Code Online (Sandbox Code Playgroud)