如何从应用程序更改启动器图标及其标签

Jac*_*cob 2 android android-launcher

如何从Android中的应用程序运行时更改启动器图标及其标签?(如果可能的话)
我指的是AndroidManifest.xml:android:icon和中定义的属性android:label.我想用我从相机拍摄的图像替换它.

M D*_*M D 6

整个答案来自这篇文章,它来自PACommonsWare.


除非通过软件升级,否则无法更改已签名密封的APK中的清单或资源.或试试这个,它对我来说工作正常,但对所有设备都不确定:

  1. 修改AndroidManifest.xml中的MainActivity部分,从中删除,在intent-filter部分中与MAIN类别对齐.

    <activity android:name="ru.quickmessage.pa.MainActivity"
     android:configChanges="keyboardHidden|orientation"
     android:screenOrientation="portrait"
     android:label="@string/app_name"
      android:theme="@style/CustomTheme"
      android:launchMode="singleTask">
      <intent-filter>
       <action android:name="android.intent.action.MAIN" />
       <category android:name="android.intent.category.LAUNCHER" />//DELETE THIS LINE
     </intent-filter>
    </activity>
    
    Run Code Online (Sandbox Code Playgroud)
  2. <activity-alias>为您的应用创建每个图标.像这样

    <activity-alias android:label="@string/app_name" 
    android:icon="@drawable/icon" 
    android:name=".MainActivity-Red"
    android:enabled="false"
    android:targetActivity=".MainActivity">
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>   
    </activity-alias>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 必要时以编程方式设置ENABLE属性

    getPackageManager().setComponentEnabledSetting(
    new ComponentName("ru.quickmessage.pa", "ru.quickmessage.pa.MainActivity-Red"), 
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
    
    Run Code Online (Sandbox Code Playgroud)

注意,必须启用至少一个,并且上面的代码完美地工作到4.0未测试到> 4.0.