Android 의 동적 데스크 톱 아이콘 변경

Android 의 동적 데스크 톱 아이콘 변경
글 링크:http://blog.csdn.net/qq_16628781/article/details/69054325
지식 점
  • 앱 데스크 톱 icon 의 설명 을 동적 으로 바 꿉 니 다.
  • activity 구성 요소 및 '동맹' 구성 요소 activity - alias 를 정의 합 니 다.
  • PackageManager 클래스 에서 구성 요 소 를 사용 하거나 사용 하지 않 습 니 다.
  • Package Info 의 소개;
  • 신조어 기록 {PackageInfo: Androidmanifest. xml 파일 설명 클래스}
  • 개술
    앱 은 중국 전자상거래 업계 에서 모 바 오 와 모 둥 이 업계 의 모범 이다.그 중 하 나 는 궁금 하 다. 바로 쌍 십일 이 다가 오자 그들의 앱 데스크 톱 아이콘 이 갑자기 쌍 십일 자 모양 의 아이콘 으로 바 뀌 었 다 는 것 이다.하지만 그 동안 업 데 이 트 된 적 이 없다 는 것 을 분명히 기억 하고 있다. 그러면 유일한 가능성 은 쌍 십일 아이콘 이 내 장 된 것 이다. 쌍 십일 아이콘 이 다가 오 면 동적 으로 바 뀌 고 쌍 십일 시간 이 지나 면 앱 의 데스크 톱 아이콘 을 일반적인 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 도 지원 할 수 있 지만 이 부분 은 아직 자세히 연구 하지 않 았 습 니 다.만약 당신 이 알 고 있다 면, 메 시 지 를 남 겨 저 에 게 알려 주세요. 모두 가 함께 공부 하고 발전 하 는 것 을 알려 주세요.
    만약 무슨 문제 가 있 으 면 즉시 저 에 게 연락 하 세 요.감사합니다.

    좋은 웹페이지 즐겨찾기