2

私は検索機能を使用し、多くの例を読んで試しましたが、問題の解決策が見つかりません...それで、ここに行きます:

1つのBroadcastReceiverにのみインテントを送信したい。したがって、新しいインテントを作成して、packageNameとpackageClassに送信する必要があります。

intent.setComponent(new ComponentName(packageName, className));

packageNameとclassNameを見つけるには、次のコードを使用します。

String appInfo = list.get(myPlayer).activityInfo.toString();
Log.d("TAG", "app " + appInfo);

String packageName = list.get(myPlayer).activityInfo.packageName.toString();    
Log.d("TAG", "package " + packageName);

String className = list.get(myPlayer).activityInfo.getClass().getName().toString();
Log.d("TAG", "class " + className);

logcatから次の結果が得られます(Play Musicの例):

app ActivityInfo{417bd5e0 com.google.android.music.MediaButtonIntentReceiver}
package com.google.android.music
class android.content.pm.ActivityInfo

これはおかしくないですか?何らかの理由で、クラスログには「MediaButtonIntentReceiver」のみが必要であり、「android.content.pm.ActivityInfo」は期待していません!!!

誰かがこれを修正する方法を知っていますか?

4

3 に答える 3

3

順序付けられたブロードキャストを検索しpackageNameclassName埋めるために、おそらく使用しているResolveInfoオブジェクトのコンテンツを確認することをお勧めします

  • ResolveInfoにはActivityInfoオブジェクトが含まれています
  • ActivityInfoにはApplicationInfoオブジェクトが含まれています
  • ApplicationInfoオブジェクトには、必要なものが含まれています

ですから、あなたの場合、意図の内容を完成させる必要があるなら、私は提案するかもしれません

    ResolveInfo ri = ... // get where you need
    Intent intent = new Intent();
    intent.setComponent(new ComponentName(
        ri.activityInfo.applicationInfo.packageName,
        ri.activityInfo.applicationInfo.className)); 

これはあなたの場合にうまくいくはずです

編集:場合によっては、特定の目的でResolveInfoを取得したclassNameはずですnull。これらの場合、1つの特定のアクティビティに対するものであるため、ri.activityInfo.name正しい値を返すものを正常に使用します。classNameactivityInfo

于 2013-01-01T10:43:05.583 に答える
1

簡単に言えばgetClass()、期待どおりのことはしません。
しかし、あなたが持っているものを使用すると、あなたが望むものを手に入れることができます:

String appInfo = list.get(myPlayer).activityInfo.toString();
String className = appInfo.substring(appInfo.lastIndexOf(".") + 1, appInfo.length() - 1);
Log.d("TAG", "class " + className);

packageNameこれはActivityInfoのフィールドであり、メソッドではないことに注意してください。whilegetClass()はメソッドですがObject、ドキュメントからのメソッドです。

このオブジェクトのクラスを表すClassの一意のインスタンスを返します。

だからあなたはの名前を求めていますactivityInfo、それは(あなたが知っているように)ActivityInfoです。

于 2012-12-31T20:42:29.797 に答える
0

それはまったく奇妙ではありません。ここ:

String className = list.get(myPlayer).activityInfo.getClass().getName().toString()

オブジェクトのクラスを取得していActivityInfoます。あなたが何をしようとしているのか正確にはわかりませんが、それがあなたが見ているものを見ている理由です。

于 2012-12-31T20:37:17.730 に答える