0

Androidアプリには、後で起動する外部アプリのアクティビティ名がいくつか保存されています。Android:アクティビティ名の文字列のアプリ名とアイコン

例:「com.companyname.app.ActivityName」

アプリ名とアイコンがちょうどこの文字列から取得する必要があります。

私はこの種のコード使用しています:

intent=new Intent("com.companyname.app.ActivityName"); 
label=packageManager.getApplicationLabel(packageManager.getApplicationInfo(intent.getPackage(),0)).toString(); 
icon=packageManager.getApplicationIcon(packageManager.getApplicationInfo(intent.getPackage(),0)); 

を、意図が十分に形成されていない、または命令が間違っているようです。

リクエストされた値を取得するにはどうすればよいですか?

+0

なぜパッケージ名をラップするためにインテントを使用していますか?パッケージ名をStringとして渡すだけで、 'getApplicationLabel()'を呼び出してください。 – adelphus

答えて

0

アクティビティクラス名だけでは、それを明白に識別するのに十分ではありません。あなたはまた、そのためのパッケージ名を持つ必要があります。次に、あなたがComponentNameとあなたもActivityInfoにアクセスし、活動自体のラベルとアイコンを得ることができ、同じコンポーネント名とパッケージマネージャのgetActivityInfo()

Intent intent = new Intent(action).setComponent(new ComponentName(pkg, cls)); 

この活動を開始する意図を作成することができます。

しかし、あなたの例では"com.companyname.app.ActivityName"のアクションを定義するためにIntent(String)コンストラクタを使用しています。

0
  1. 他のパッケージのアクティビティ名を保存することは悪い考えです。アプリ は、その名前のアクティビティがなくなった更新バージョンをリリースすることがあります。

  2. Intentコンストラクタあなたはアクション Intentセットを使用しています。現在、パッケージはありません。

ターゲットアプリケーションのパッケージ名のみを保存し、それを使ってそのアプリケーションに関する情報を取得します。

String packageName = ...; 
try { 
    String label = packageManager.getApplicationLabel(packageName); 
    Drawable icon = packageManager.getApplicationIcon(packageName); 
    // etc. 
} catch (NameNotFoundException e) { 
    Log.e(TAG, "Couldn't get info for package " + packageName); 
} 

あなたは、そのアプリを起動Intentはそれを行うために取得するためにpackageManager.getLaunchIntentForPackage(...)を使用する必要がある場合。

0
<activity 
    android:name=".ui.HomeActivity" 
    android:label="@string/title_home_activity" 
    android:icon="@drawable/icon"> 
    <intent-filter android:label="@string/app_name"> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
関連する問題