我有一個列表,其中包含可以處理我的兩個操作Intent.ACTION_PICK
和MediaStore.ACTION_IMAGE_CAPTURE
中的任何一個的應用程序。後來我用一個數組適配器來填充我的listivew與這個列表中的信息。無法從ResolveInfo實例獲取意圖過濾器
在我的onItemClickListener
中,能夠從ResolveInfo
實例中獲得ActivityInfo
和ComponentName
。 但我不能夠從ResolveInfo
(企圖得到它拋出NullPointerException異常),然而任何應用程序,在我的名單MUST HAVE解決我的意圖之一它是LN的獲得IntentFilter
實例名單
這是投擲線NullPointerException異常IntentFilter filter = launchable.filter;
private void acquirePicture(){
ListView lv=(ListView)dialog.findViewById(R.id.listView1);
PackageManager pm=getPackageManager();
List<ResolveInfo> launchables=pm.queryIntentActivityOptions(
this.getComponentName(),new Intent[]{takePicture},
photoPickerIntent,0);
Collections.sort(launchables,
new ResolveInfo.DisplayNameComparator(pm));
appAdapter=new AppAdapter(pm, launchables);
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
// TODO Auto-generated method stub
ResolveInfo launchable=appAdapter.getItem(position);
ActivityInfo activity=launchable.activityInfo;
ComponentName name=new ComponentName(activity.applicationInfo.packageName,
activity.name);
IntentFilter filter = launchable.filter;
if(filter.actionsIterator() != null){
Iterator<String > actions = filter.actionsIterator();
}
int actioncode;
Intent intent = new Intent();
Uri uri;
if(filter.hasAction(Intent.ACTION_PICK)){
actioncode = 1;
uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
intent.setData(uri);
}else{
actioncode = 0;
}
intent.setComponent(name);
startActivityForResult(intent,actioncode);
}
});
}
class AppAdapter extends ArrayAdapter<ResolveInfo> {
private PackageManager pm=null;
AppAdapter(PackageManager pm, List<ResolveInfo> apps) {
super(Custom_chooser.this, R.layout.row, apps);
this.pm=pm;
}
@Override
public View getView(int position, View convertView,
ViewGroup parent) {
if (convertView==null) {
convertView=newView(parent);
}
bindView(position, convertView);
return(convertView);
}
private View newView(ViewGroup parent) {
return(getLayoutInflater().inflate(R.layout.row, parent, false));
}
private void bindView(int position, View row) {
TextView label=(TextView)row.findViewById(R.id.label);
label.setText(getItem(position).loadLabel(pm));
ImageView icon=(ImageView)row.findViewById(R.id.icon);
icon.setImageDrawable(getItem(position).loadIcon(pm));
}
}
問題1 on
如何獲取所選應用程序在我的onClickListner正文中解析的意圖?
我真的不明白'queryIntentActivityOptions()'的第二個和第三個參數,我所做的是猜測工作。我沒有從Android文檔中理解他們,因爲甚至沒有例子。你明白這個方法嗎? –
爲答案,這是完美的。運作良好。我非常感謝你的幫助。我沒有很好地理解'queryIntentActivityOptions()**中的第三個參數,這就是爲什麼我要把零**。請給我反饋我以前的評論(上面的一個)。 –
默認情況下,「ResolveInfo」的某些字段未被填充;必須使用'GET_'常量來請求它們。 –