Androidアプリの名前とデスクトップアイコンを動的に変更する方法

8305 ワード

久しぶりにブログを书いて、今日の仕事が忙しくないうちに、このブログを书いて、自分の勉强の过程の记录として、APPのデスクトップのアイコンと名前をどう动的に修正するかを研究している友达のために、少しの助けとアドバイスを提供して、くだらないことを言わないで、本題を始めます!
まず、主な修正方法を紹介する前に、まず関連知識の紹介をします.次のようになります.
1.activity-aliasラベル要素
ctivity-aliasは、その名の通りactivityの別名です.ここを見ると、いったいどのActivityの別名なのかと思います.Activityを作成すると
AndroidManifestでActivityを静的に宣言し、android:name、android:label、android:iconなどのプロパティを構成する必要があります.
構成も可能
intent-filter.Activity-aliasラベルの場合、android:targetActivityというプロパティがあります.このプロパティは、ラベルのターゲットを設定するために使用されます.
Activity
というか、このターゲットActivityの別名です.これでactivity-aliasは独立したActivityを表すのではなく、すでに
存在する
Activityが作成した別名.
2.activity-alias構文および宣言
Activity-aliasは、既に存在するActivityの別名として、ターゲットActivityをすばやく開くことを宣言する別名ラベルを使用します.したがってactivity-aliasは
Activityのショートカット・エントリを設定します.デスクトップに置くか、エイリアスを介して他のコンポーネントによってすばやく呼び出すことができます.このラベル要素はいくつかの属性とintent-filter、
Meta-dataなどの構成により、同じActivityを開いているが、ターゲットActivityとは異なる機能ロジックをトリガーすることができる.簡単な例を挙げると
前にメインインタフェースを開く必要がある場合は、Activityをクリックしてアクセスする必要があります.Activity-aliasを使用してActivityのショートカットエントリを構成すると、
デスクトップにアイコンを生成し、デスクトップアイコンをクリックすると、Activityに直接アクセスできます.この機能は、機能インタフェースに迅速にアクセスする必要があるいくつかのニーズを満たすことができます.
android:exported=["true"| "false"]  
android:icon="drawable resource" 
android:label="string resource" 
android:name="string" 
android:permission="string" 
android:targetActivity="string">  
. . .
activity-alias>
プロパティについては、次のように説明します.
Android:enableこのプロパティは、ターゲットActivityが別名でシステムにインスタンス化されるかどうかを決定するために使用されます.デフォルトはtrueです.アプリケーションにもenableプロパティがあり、同時にtrueである場合にのみactivity-aliasのenableが有効になります.
Android:exportedこのプロパティがtrueの場合、ターゲットActivityは他のアプリケーションで呼び出され、falseの場合はアプリケーション自体で呼び出されます.そのデフォルト値はactivity-aliasがintent-filter要素を含むかどうかによって決まり、ある場合はtrueがデフォルトです.なければfalseです.intent-filterがあれば、ターゲットActivityは暗黙的なIntentに一致するため、外部アプリケーションによって呼び出されることもよく理解されています.intent-filterがない場合、ターゲットActivityを呼び出すには、アプリケーション自体が正確なクラス名を知っているため、falseがデフォルトです.
Android:iconこのプロパティは比較的面白く、iconをカスタマイズすることができ、アプリケーション自体がデスクトップにあるiconとは異なることができます.デスクトップにショートカットエントリを作成する必要がある場合は、製品が異なるiconを交換する必要があるかもしれません.
Android:labelこの属性はandroid:iconに似ていて、アイコンが変わっていて、名前を変えるのも合理的でしょう.この属性はそのために生まれたのです.
android:nameこの属性は任意の文字列であってもよいが、クラス名命名仕様に合致することが望ましい.Activity要素のname属性は実質的に特定のActivityクラスを指しますが、activity-aliasのname属性は一意の識別としてのみ使用されます.
Android:permissionこのプロパティは、エイリアス宣言によってターゲットActivityを呼び出すために必要な権限を示します.
Android:targetActivityこのプロパティは、ターゲットActivity、すなわちactivity-aliasによって呼び出されたActivityがどれであるかを指定します.このプロパティは、activityラベルのnameプロパティに似ており、仕様のActivityパッケージ名クラス名が必要です.
     3.最後に、アプリのアイコンと名前を具体的に修正する方法を具体的に見てみましょう.
       1.まず、インベントリプロファイルで作成します.activity-aliasラベルは、対応するターゲットactivityの後に構成され、No者がクラッシュする可能性があります.
<activity-alias
    android:name=".MainAliasActivity"
    android:targetActivity=".MainActivity"
    android:label="app ICON"
    android:icon="@mipmap/ic_launcher_change"
    android:enabled="false">
  
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    intent-filter>

activity-alias>
2. Java            ,       activity—alias    。
 
   
changeIcon("com.hansion.changelaunchericon.MainAliasActivity");
 
   
 public void changeIcon(String activityPath) {
        PackageManager pm = getPackageManager();
        pm.setComponentEnabledSetting(getComponentName(),
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
        pm.setComponentEnabledSetting(new ComponentName(this, activityPath),
                PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);


        //         
//        restartSystemLauncher(pm);
    }
 
   
public void restartSystemLauncher(PackageManager pm) {
    ActivityManager am = (ActivityManager) getSystemService(Activity.ACTIVITY_SERVICE);
    Intent i = new Intent(Intent.ACTION_MAIN);
    i.addCategory(Intent.CATEGORY_HOME);
    i.addCategory(Intent.CATEGORY_DEFAULT);
    List resolves = pm.queryIntentActivities(i, 0);
    for (ResolveInfo res : resolves) {
        if (res.activityInfo != null) {
            am.killBackgroundProcesses(res.activityInfo.packageName);
        }
    }
}