Intent.createChooser()
メソッドを使用して選択ダイアログを開きます。しかし、そのダイアログでは、「JUST ONCE」および「ALWAYS」オプションが表示されません。このタイプの選択ダイアログとIntent.createChooser()
メソッドが必要です
これが私のコードです。
File mFile = new File("give your file path here");
String type = "video/mp4";
Intent viewDoc = new Intent(Intent.ACTION_VIEW);
viewDoc.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
viewDoc.setFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
Uri contentUri = FileProvider.getUriForFile(this, "com.xyz.fileprovider", mFile);
viewDoc.setDataAndType(contentUri, type);
PackageManager pm = getPackageManager();
apps = pm.queryIntentActivities(viewDoc, PackageManager.MATCH_DEFAULT_ONLY);
ArrayList<Intent> targetIntents = new ArrayList<Intent>();
for (ResolveInfo resolveInfo : apps) {
String packageName = resolveInfo.activityInfo.packageName;
grantUriPermission(packageName, contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
if (!BuildConfig.APPLICATION_ID.equals(packageName)) {
Intent targetIntent = new Intent(Intent.ACTION_VIEW); // targetIntent.setDataAndType(contentUri, type);
targetIntent.setPackage(packageName);
targetIntent.setDataAndType(contentUri, type);
targetIntents.add(targetIntent);
}
}
if (type == null || type.equals("") || targetIntents.size() <= 0) { //application/octet-stream
android.app.AlertDialog alertDialog = new android.app.AlertDialog.Builder(this).create();
alertDialog.setTitle(getResources().getString(R.string.app_name));
alertDialog.setMessage(getResources().getString(R.string.offline_file_not_supported_error));
alertDialog.setButton(DialogInterface.BUTTON_NEUTRAL, "OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
} else {
Intent chooserIntent = Intent.createChooser(targetIntents.remove(0), "Open file with");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetIntents.toArray(new Parcelable[]{}));
startActivity(chooserIntent);
//startActivity(viewDoc);
}
しかし、このコードの後、以下のような選択ダイアログが表示されます
しかし、私はこのダイアログで JUST ONCE と ALWAYS オプションが必要です。
自分のアプリをセレクターから削除したいので、以下のコードを使用しました。
for (ResolveInfo resolveInfo : apps) {
String packageName = resolveInfo.activityInfo.packageName;
grantUriPermission(packageName, contentUri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION);
if (!BuildConfig.APPLICATION_ID.equals(packageName)) {
Intent targetIntent = new Intent(Intent.ACTION_VIEW); // targetIntent.setDataAndType(contentUri, type);
targetIntent.setPackage(packageName);
targetIntent.setDataAndType(contentUri, type);
targetIntents.add(targetIntent);
}
}