別のアプローチを使用することもできます。カテゴリをアクティビティに設定するのではなく、アプリケーションマニフェストにメタ情報を設定します。 (アプリケーションがフラグDONT_DELETE_DATAで削除されていない場合)パッケージ情報を削除した 注
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name"
android:versionCode="1"
android:versionName="1" >
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<meta-data
android:name="meta-name"
android:value="meta-value" />
</application>
</manifest>
もう取得できないパッケージのインストールを追跡するために、放送受信機を追加します。パッケージのメタ情報を確認して、あなたの価値が既にあることを確認してください。
private BroadcastReceiver packageListener = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
Log.i(intent.getAction(), intent.getData().getEncodedSchemeSpecificPart());
//Currently being installed or deleted package
String packageName = intent.getData().getEncodedSchemeSpecificPart();
Object value = null;
try {
ApplicationInfo appInfo = getPackageManager().getApplicationInfo(packageName,PackageManager.GET_META_DATA);
//Get meta value if exits
value = appInfo.metaData.get("meta-name");
} catch (NameNotFoundException e) {
Log.e(TAG, "exception occured", e);
}
//check meta info if it is yours
}
}
あなたはそれがあなた自身のアプリケーションを認識するための安全な方法ではありませんので、他のアプリケーションはそのマニフェストであなたのメタデータを設定することができることを見るように。最善の方法は、すべてが同じ証明書で署名されている場合、apkの署名をチェックすることです。
private BroadcastReceiver packageListener = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
Log.i(intent.getAction(), intent.getData().getEncodedSchemeSpecificPart());
String packageName = intent.getData().getEncodedSchemeSpecificPart();
Signature[] signatures = null;
try {
PackageInfo packageInfo = getPackageManager().getPackageInfo(packageName,PackageManager.GET_SIGNATURES);
signatures = packageInfo.signatures;
} catch (NameNotFoundException e) {
Log.e(TAG, "exception occured", e);
}
//check installed package signature if it matches
}
}
解決方法はありましたか? –
どのようにしてプログラムのカテゴリをどのように取得できますか? –
@ Sam-In-TechValensでは、パッケージ名を使用してカテゴリを取得することはできません。カテゴリを使用してパッケージ名を抽出するだけです。だから私は放送でやったことは、パッケージをインストールし、arraylistで定義されたカテゴリを使用してすべてのパッケージを取り出し、インストールされている最新のパッケージとのマッチングは、インストールされているアプリケーションが今自分のアプリケーションであることを意味します。 – pyus13