バックグラウンド
他のアプリでサポートされているインテントの情報を取得する必要があるアプリを作成しました (たとえば、デスクトップにショートカットを作成するため)。
問題
次の単純なコードを使用しています。これは、テストしたアプリの 99% でうまく機能しました。
final Intent mainIntent=new Intent();
mainIntent.setPackage(packageName);
final List<ResolveInfo> resolveInfos=getPackageManager().queryIntentActivities(mainIntent,0);
問題は、一部のアプリ (パッケージ名が「com.mxtech.videoplayer.ad」のこのアプリなど) では、(コードの最後の行で) nullPointerException が発生することです。
ところで、追加のフィルタリング フラグを設定しない理由は、考えられるものをすべて取得してから、ユーザーに選択肢を提示するためです。デフォルトのものを使用するか、うまく機能しない可能性のある他のものを試してください。
私が試したこと
私が書いたコードはあらゆる種類のアプリで完璧に機能しましたが、次のようないくつかのフラグを追加しようとしました:
mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);
また:
final List<ResolveInfo> resolveInfos=getPackageManager().queryIntentActivities(mainIntent,PackageManager.MATCH_DEFAULT_ONLY);
または両方。
質問
このアプリでのみこの例外が発生するのはなぜですか? また、どのように修正して、起動できるサポートされているすべてのインテントを取得できますか?
もちろん、インテントを取得する 2 つの方法 (try-catch を使用) を追加することもできますが、もっと「正しい」方法があるかもしれません。
"Intent.ACTION_MAIN" のインテントにアクションを追加できることはわかっていますが、これにより、取得したいインテントの多くが削除されます。