Notice
Recent Posts
Recent Comments
Link
투케이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();
}
} // [메인 종료]
} // [클래스 종료]
[결과 출력]
반응형
'Android' 카테고리의 다른 글
Comments