투케이2K

253. (AndroidStudio/android/java) 앱 런처 대표 아이콘 동적으로 변경 실시 - activity-alias 본문

Android

253. (AndroidStudio/android/java) 앱 런처 대표 아이콘 동적으로 변경 실시 - activity-alias

투케이2K 2022. 1. 22. 21:39
반응형

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : java

 

[소스 코드]

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">


        <!-- [원본] 메인 런처 액티비티 -->
        <activity
            android:name=".MainActivity"
            android:exported="true">
        </activity>



        <!-- [상속] alias : android:enabled , android:targetActivity -->
        <activity-alias
            android:name=".MainActivity1"
            android:enabled="true"
            android:exported="true"

            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"

            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

            </intent-filter>
        </activity-alias>



        <!-- [상속] alias : android:enabled , android:targetActivity -->
        <activity-alias
            android:name=".MainActivity2"
            android:enabled="true"
            android:exported="true"

            android:icon="@drawable/app_circle2"
            android:label="@string/app_name"
            android:roundIcon="@drawable/app_circle2"

            android:targetActivity=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>
        </activity-alias>

    </application>
​

​

​

 



public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        /**
         * TODO [참고 사항]
         * 1. 메인 표시되는 Activity 에서는 아이콘을 지정하지 않습니다
         * 2. 메인 Activity 를 상속받은 alias 에서 개별 동적 아이콘을 지정합니다
         *   - android:enabled="true" 필수
         *   - 부모 액티비티 이름 지정 필수 : android:targetActivity
         * 3. alias 로 동적 아이콘 변경 시 바탕화면에 표시되는 아이콘은 변경되지만 Application 에서 지정한 아이콘은 변경되지 않음
         * */


        // TODO [로직 [1] : 우선 메인 런처 액티비티를 상속 받은 alias 를 모두 히든 처리 실시]
        List<String> disableNames = new ArrayList<String>();
        disableNames.add(".MainActivity1"); // alias 추가
        disableNames.add(".MainActivity2"); // alias 추가
        for (int i = 0; i < disableNames.size(); i++) {
            try {
                getPackageManager().setComponentEnabledSetting(
                        new ComponentName(getPackageName(), getPackageName()+disableNames.get(i)),
                        PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
            } catch (Exception e) {
                // e.printStackTrace();
            }
        }


        // TODO [로직 [2] : 아이콘을 표시하려는 alias 액티비티 표시 실시]
        String activeName = ".MainActivity2";
        try {
            getPackageManager().setComponentEnabledSetting(
                    new ComponentName(getPackageName(), getPackageName()+activeName),
                    PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
        }
        catch (Exception e){
            //e.printStackTrace();
        }

    } // [메인 종료]

} // [클래스 종료]
 

[결과 출력]

 

 

반응형
Comments