![](/img/trans.png)
[英]Android - Limit Intent.ACTION_GET_CONTENT to a specific file extension
[英]Android Intent.ACTION_GET_CONTENT (only use specific apps from ResolveInfo)
在這里遇到了一個小障礙,為用戶提供了從圖庫中選擇照片的選項。 在某些手機上,有更多的應用程序聲稱可以處理用戶的意圖,讓他們可以選擇……是否有辦法以一種標准的方式將其過濾為僅標准的照相館?
p.queryIntentActivities中的第一項將始終是圖庫嗎?
這是我們正在獲取應用程序列表的方法。
Intent i = new Intent(Intent.ACTION_GET_CONTENT);
i.setType("image/*");
i.putExtra("return-data", true);
PackageManager p = new PackagerManager();
List<ResolveInfo> list = p.queryIntentActivities(i, 0);
因此,如果我們僅獲得一個resolveinfo ...太好了! 但是,如果列表中有多個項目...按packageName進行過濾似乎有點麻煩,因為我們不知道packageName是什么...那里有太多不同的手機。
有什么建議嗎?
在某些手機上,有更多的應用程序聲稱可以處理用戶的意圖,讓他們可以選擇……是否有辦法以一種標准的方式將其過濾為僅標准的照相館?
不,因為沒有“標准問題照相館”。
p.queryIntentActivities中的第一項將始終是圖庫嗎?
沒有。
有什么建議嗎?
允許用戶從他們選擇的任何支持ACTION_GET_CONTENT
應用中選擇image/*
MIME類型的image/*
。
這是使用來自ResolveInfo的特定應用程序的方法:當您確切地知道要使用哪個應用程序並且不想顯示“使用完成操作”對話框時,這很有用。
查詢響應Intent的應用。ACTION_GET_CONTENT:
Intent intent= new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("image/*"); mApps = context.getPackageManager().queryIntentActivities(intent, 0);
mApps將保存所有支持Intent.ACTION_GET_CONTENT Intent的應用程序的列表。
為您所需的應用觸發startActivityForResult:
ResolveInfo info = mApps.get(position); // depends on which app you want to start String packageName = info.activityInfo.packageName; Intent intent = new Intent(); intent.setAction(Intent.ACTION_GET_CONTENT); intent.setPackage(packageName); // this will direct the intent to your specific app intent.setType("image/*"); intent.putExtra("crop", "true"); ... startActivityForResult(intent, PICK_IMAGE);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.