アプリケーションのパッケージ名が与えられた場合、そのアプリケーションがホームスクリーンのウィジェットをサポートしているかどうかを知る方法は??
2 に答える
David Wasser のソリューションも私の最初の推測でしたが、私のウィジェットの 1 つを検出できませんでした。最初の方法がうまくいかない場合は、別の方法があります。
すべてのホーム画面ウィジェットがリッスンする必要がある ACTION_APP_WIDGET_UPDATE アクションのすべてのレシーバーを一覧表示し、パッケージ名でフィルター処理できます。
PackageManager pm = getPackageManager();
Intent intent = new Intent();
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
List<ResolveInfo> list = pm.queryBroadcastReceivers(intent, 0);
for (ResolveInfo info : list) {
Log.i("package", info.activityInfo.packageName);
}
PackageManager を使用getPackageInfo(packageName, GET_RECEIVERS)
してアプリケーションを呼び出します。
すべてをループして、 内の各オブジェクトPackageInfo.receivers
を呼び出します。PackageManager.getReceiverInfo(componentName, GET_META_DATA)
ActivityInfo
PackageInfo.receivers
フィールドを見てくださいmetadata
。これは null であるか、Bundle を含んでいる可能性があります。バンドルが含まれている場合は、バンドル内で key を持つアイテムを探します"android.appwidget.provider"
。それが見つかった場合は、アプリケーションがホーム画面のウィジェットをサポートしていることを確信できます。