Android 의 동적 데스크 톱 아이콘 변경
12413 단어 안 드 로 이 드 구성 요소
글 링크:http://blog.csdn.net/qq_16628781/article/details/69054325
지식 점
앱 은 중국 전자상거래 업계 에서 모 바 오 와 모 둥 이 업계 의 모범 이다.그 중 하 나 는 궁금 하 다. 바로 쌍 십일 이 다가 오자 그들의 앱 데스크 톱 아이콘 이 갑자기 쌍 십일 자 모양 의 아이콘 으로 바 뀌 었 다 는 것 이다.하지만 그 동안 업 데 이 트 된 적 이 없다 는 것 을 분명히 기억 하고 있다. 그러면 유일한 가능성 은 쌍 십일 아이콘 이 내 장 된 것 이다. 쌍 십일 아이콘 이 다가 오 면 동적 으로 바 뀌 고 쌍 십일 시간 이 지나 면 앱 의 데스크 톱 아이콘 을 일반적인 icon 으로 바 꾸 는 것 이다.
아이콘 이 원래 앱 에 있 는 이상 (또는 인터넷 에서 다운 로드 된 것 일 뿐, 아 는 친구 가 댓 글 을 남 겨 줄 수 있 을 것 이 라 고 추측 하 는 것 일 뿐) 아이콘 이 어떻게 동적 으로 바 뀌 었 는 지 궁금 하 다.
탐색
Android 에 있어 서 모든 activity 는 하나의 구성 요소 이 므 로 모든 구성 요 소 를 관리 할 수 있 습 니 다.프로그램의 입구 에 대해 우 리 는 android. intent. action. MAIN 이 지정 한 것 을 알 고 있 습 니 다.
<activity
android:name=".HomeActivity"
android:label="@string/app_name"
android:theme="@style/AppThemeToolbar">
<intent-filter>
// Activity
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
android. intent. category. LAUNCHER 에 대해 서 는 무엇 을 설정 합 니까?이것 은 프로그램 이 프로그램 목록 에 표 시 될 지 여 부 를 결정 하 는 것 입 니 다.
또한 하나의 activity - alias 속성 이 있 습 니 다. 이 속성 은 여러 개의 다른 입 구 를 만 드 는 데 사용 할 수 있 습 니 다.용법 은 다음 과 같다.
<activity
android:name=".HomeActivity"
android:label="@string/app_name"
android:theme="@style/AppThemeToolbar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity>
<activity-alias
android:name=".HomeActivity2"
android:enabled="false"
android:icon="@drawable/icon2"
android:label="icon2"
android:targetActivity=".HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity-alias>
<activity-alias
android:name=".HomeActivity3"
android:enabled="false"
android:icon="@drawable/icon3"
android:label="icon3"
android:targetActivity=".HomeActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
intent-filter>
activity-alias>
위 코드 에 따 르 면 세 개의 프로그램의 입구 가 있 습 니 다. 그 중에서 두 번 째 와 세 번 째 는 사용 하지 않 습 니 다. enable 이 부족 하면 기본 값 은 true 입 니 다.XML 에서 사용 하지 않 을 수 있 으 니 코드 에서 구성 요 소 를 시작 할 수도 있 습 니 다.
탐색
APP 의 icon 은 전체 가방 범위 에 대한 것 이다. APP 가방 에 사용 하려 면 시스템 이 우리 에 게 전체 가방 을 관리 하 는 종 류 를 제공 하 는 것 이 아 닐 까?사실 시스템 은 패키지 관리자 라 는 종 류 를 제공 합 니 다. 이 종 류 는 현재 응용 프로그램 에서 서로 다른 유형의 정 보 를 얻 을 수 있 습 니 다.예 를 들 어 서비스의 필드 상수, 낮은 전력 소모 블 루 투 스, 카메라 = =, 그리고 일련의 가방 작업 과 관련 된 추상 적 인 방법 을 정의 했다.모든 시스템 구성 요 소 를 관리 할 수 있 습 니 다.
앱 의 모든 대상 이 시스템 의 구성 요소 라 는 것 을 알 고 있 습 니 다. 그러면 패키지 관리자 클래스 에서 구성 요소 에 대한 조작 방법 을 볼 수 있 습 니 다.
이 방법 은 다음 과 같은 비교적 중요 한 방법 이 있다.
//
public abstract void setComponentEnabledSetting(ComponentName componentName, int newState, int flags);
// ,
public abstract int getComponentEnabledSetting(ComponentName componentName);
인자 1: 구성 요소 의 이름;
인자 2: 구성 요소 의 새로운 상태;
인자 3: killapp 를 표시 할 지 여부;
상기 두 가지 방법 이 있 으 면, 우 리 는 주어진 서로 다른 구성 요소 의 이름 + 상태 에 따라 사용 할 수 있 는 지 여 부 를 설정 할 수 있 습 니 다.탐색 1 에서 정 의 된 3 개 구성 요소 의 시작 과 금지 상황 을 결합 하여 대응 하 는 enable 작업 을 할 수 있 습 니 다.
결합 하여 사용 하 다
private PackageManager mPackageManager;
//
private ComponentName componentNameDefault;
private ComponentName componentName2;
private ComponentName componentName3;
/**
* icon2
*/
private void enableComponentName2() {
disableComponent(componentNameDefault);
disableComponent(componentName3);
enableComponent(componentName2);
}
/**
* icon3
*/
private void enableComponentName3() {
disableComponent(componentNameDefault);
disableComponent(componentName2);
enableComponent(componentName3);
}
/**
*
*
* @param componentName
*/
private void enableComponent(ComponentName componentName) {
// , Androidmanifest
mPackageManager.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
/**
*
*
* @param componentName
*/
private void disableComponent(ComponentName componentName) {
mPackageManager.setComponentEnabledSetting(componentName,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
//
public void pmTest() {
//
mPackageManager = getPackageManager();
// activity
componentNameDefault = getComponentName();
// , activity-alias name:HomeActivity2
componentName2 = new ComponentName(getBaseContext(), "com.yaojt.HomeActivity2");
componentName3 = new ComponentName(getBaseContext(), "com.yaojt.HomeActivity3");
String action = getActionFromServer();// ,
if ("comp2".equals(action)){
enableComponentName2();
}else if ("comp3".equals(action)){
enableComponentName3();
}
// ,
}
위의 코드 를 통 해 XML 파일 에 정 의 된 구성 요 소 를 어떻게 가 져 오 는 지 알 수 있 습 니 다.그리고 필요 에 따라 해당 하 는 구성 요 소 를 사용 하거나 금지 하여 앱 데스크 톱 아이콘 을 업데이트 하 는 기능 을 수행 합 니 다.(새 앱 데스크 톱 아이콘 을 보 려 면 시간 이 걸 릴 수 있 습 니 다)
과외 지식
PackageInfo: Androidmanifest. xml 파일 의 모든 정 보 를 불 러 오 는 클래스 입 니 다.
모든 정 보 는 AndroidManifest. xml 파일 에서 나 옵 니 다.예 를 들 어 패키지 이름 packageName, 버 전 번호 versionCode, shared UserId 공유 id, apk 첫 번 째 와 마지막 설치 시간, 성명 의 activity, service, receiver, provider 와 요청 권한 등 정보.
총결산
이상 은 동적 데스크 톱 에서 아이콘 을 바 꾸 는 방법 입 니 다. 바 꿔 야 할 icon 을 미리 넣 어야 합 니 다. 동적 설정 icon 도 지원 할 수 있 지만 이 부분 은 아직 자세히 연구 하지 않 았 습 니 다.만약 당신 이 알 고 있다 면, 메 시 지 를 남 겨 저 에 게 알려 주세요. 모두 가 함께 공부 하고 발전 하 는 것 을 알려 주세요.
만약 무슨 문제 가 있 으 면 즉시 저 에 게 연락 하 세 요.감사합니다.