似たようなものを探している人に役立つ可能性があるため、質問に答えています。したがって、これは、独自の Open With Dialog をカスタマイズして作成する方法です。
ステップ 1: 表示したいアプリのリストを取得します。そのためには、アプリをインテントから除外する必要があります。
final Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(fileUri, mimeType);
List<ResolveInfo> getAllAppswhichcanViewtheFile = (List<ResolveInfo>)getApplicationContext().getPackageManager().queryIntentActivities(intent, 0);
Iterator<ResolveInfo> i = getAllAppswhichcanViewtheFile .iterator();
while (i.hasNext()) {
ResolveInfo file = i.next();
// Use condition to filter the List
if (file.activityInfo.packageName.contains(XXXX)) {
i.next();
} else {
i.remove();
}
List<ResolveInfo> resolvedPrintList = getAllAppswhichcanViewtheFile ;
ステップ 2: フィルターされたアプリをアラート ダイアログに表示する:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(DataUtils.getString(R.string.xyz));
final OpenWithArrayList adapter = new OpenWithArrayList(this, R.layout.basiclistview, R.id.text1, resolvedPrintList);
builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ResolveInfo info = (ResolveInfo)adapter.getItem(which);
Intent1.setClassName(info.activityInfo.packageName,info.activityInfo.name); startActivity(intent1);
} });
builder.create();
builder.show();
ステップ 3: アダプターの作成: public class OpenWithArrayList extends ArrayAdapter{
Context context;
Object[] items;
boolean[] arrows;
int layoutId;
public OpenWithArrayList(Context context, int resource,
int textViewResourceId, List<ResolveInfo> objects) {
super(context, resource, textViewResourceId, objects);
this.context = context;
this.items = objects.toArray();
this.layoutId = resource;
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if(row==null){
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row=inflater.inflate(R.layout.basiclistview,parent, false);
TextView label=(TextView)row.findViewById(R.id.text1);
label.setText(((ResolveInfo)items[position]).activityInfo.applicationInfo.loadLabel(context.getPackageManager()).toString());
ImageView image = (ImageView) row.findViewById(R.id.logo);
image.setImageDrawable(((ResolveInfo)items[position]).activityInfo.applicationInfo.loadIcon(context.getPackageManager()));
}
return(row);
}
}