私が送信したアプリケーションのパッケージ名を確認する方法を探していました。私のインテントフィルターで受け取ったインテント。インテントフィルタを処理するアプリケーションのアクティビティでは、インテント送信者がインテントエクストラフィールドにプロセスIDを含める必要があります。受信アクティビティは、関連するアプリケーションパッケージ名をActivityManagerから取得できます。
ここにStackOverflowをシフトしながら見つけたコードの例をいくつか示します。両方のアプリのために必要な
定数
のAppを受け
public static final String EXTRA_APP_ID;
public static final String ACTION_VERIFY = "com.example.receivingapp.action.VERIFY";
活動を呼び出す
Intent verifyIntent = new Intent();
verifyIntent.setAction(Consts.ACTION_VERIFY);
verifyIntent.putExtra(EXTRA_APP_ID, android.os.Process.myPid());
// Verify that the intent will resolve to an activity
if (verifyIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(verifyIntent, Consts.REQUEST_VERIFY);
} else {
Log.d(TAG, "Application not found.");
}
マニフェスト
<activity
android:name="com.example.receivingapp.ReceivingActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="com.example.receivingapp.VERIFY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
ReceivingActivity
if (getIntent().hasExtra(OnyxCoreConsts.EXTRA_APP_ID)) {
string appName = null;
// Resolve intent
if (getIntent().getAction().equals(ACTION_VERIFY) {
int appPid = getIntent().getIntExtra(EXTRA_APP_ID, -1);
if (-1 != mAppPid) {
appName = Utils.getAppNameByPID(mContext, mAppPid);
}
if (null != appName && !"".equalsIgnoreCase(appName)) {
// Do something with the application package name
}
}
}
Utilsのクラス
public static String getAppNameByPID(Context context, int pid){
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
if (processInfo.pid == pid) {
return processInfo.processName;
}
}
return "";
}
これはハックです、bnutしかし、私の知る限りでは、BRはサービスからメッセージを取得する必要があり、これは、上出来ですまた、私はサービスがローカルでなければならないと仮定それを送り返したり、意図を使ってアクティビティに送ると、それはサービスにバインドするつもりではないので...そのメソッドを持つことは実際にBRのアイデアを破っています。 – codeScriber