0

ファイルをクリックすると、[プログラムから開く] ダイアログに複数のオプションが表示されます。これは、Action_VIEW でインテントを送信し、それを受け取るアプリが複数あるためです。

intent.setAction(android.content.Intent.ACTION_VIEW);
        Uri fileUri = Uri.parse("file://" + location);

セキュリティ上の理由から、たとえば、アプリからファイルを開くために使用されるプリンターアプリなど、それらの一部を無効にしたいと考えています。

オプションを除外したり、表示するオプションを選択したりするメカニズムはありますか?

4

2 に答える 2

0

アプリケーション名がわかっている場合は、SetPackage で試すことができます。たとえば、コードでは、setPackage を使用してパッケージ名を指定できます。

intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setPackage("com.test.print");
Uri fileUri = Uri.parse("file://" + location);
于 2012-10-12T15:09:29.333 に答える
0

似たようなものを探している人に役立つ可能性があるため、質問に答えています。したがって、これは、独自の 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);

}

}

于 2014-04-29T12:27:07.083 に答える