createChooser调用所有匹配的第三应用:
public class AppFilterActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.setType("image/png");
Intent chooserIntent = Intent.createChooser(intent, "Select app");
if (chooserIntent == null)
{
return;
}
startActivity(chooserIntent);
}
}
过滤app列表中的某个app:
1,
public class AppFilterActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent(Intent.ACTION_ATTACH_DATA);
intent.setType("image/png");
showSetAsList(intent);
}
private void showSetAsList(Intent intent)
{
PackageManager mPackageManager = AppFilterActivity.this.getPackageManager();
List<ResolveInfo> mShareAppLst = mPackageManager.queryIntentActivities(intent, 0);
List<ResolveInfo> mAppLst = new ArrayList<ResolveInfo>();
int numActivities = mShareAppLst.size();
// 遍历设置为列表,移除设置为列表中的联系人
for (int i = 0; i < numActivities; i++)
{
ResolveInfo reinfo = mShareAppLst.get(i);
if (reinfo.activityInfo.name.equals("com.android.contacts.activities.AttachPhotoActivity"))
{
continue;
}
mAppLst.add(reinfo);
}
ChooseAppAdapter mAdapter = new ChooseAppAdapter(mAppLst, AppFilterActivity.this.getApplicationContext());
AlertDialog.Builder alertDialog = new AlertDialog.Builder(AppFilterActivity.this);
alertDialog.setTitle("select app");
alertDialog.setAdapter(mAdapter, new ShareAppItemClickListener(intent, mAppLst, mAdapter)).create().show();
}
public class ChooseAppAdapter extends BaseAdapter
{
private List<ResolveInfo> mDialogList = null;
private PackageManager mPackageManager = null;
private LayoutInflater mInflater = null;
public ChooseAppAdapter(List<ResolveInfo> mDialogList, Context context)
{
this.mDialogList = mDialogList;
this.mPackageManager = context.getPackageManager();
sort();
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount()
{
return mDialogList != null ? mDialogList.size() : 0;
}
@Override
public Object getItem(int position)
{
return position;
}
@Override
public long getItemId(int position)
{
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if (position >= mDialogList.size())
{
return null;
}
View view;
if (convertView == null)
{
view = mInflater.inflate(R.layout.share_menu_item, parent, false);
} else
{
view = convertView;
}
ImageView categoryIcon = (ImageView) view.findViewById(R.id.menu_icon);
categoryIcon.setImageDrawable(((ResolveInfo) mDialogList.get(position)).loadIcon(mPackageManager));
TextView categoryName = (TextView) view.findViewById(R.id.menu_title);
categoryName.setText(((ResolveInfo) mDialogList.get(position)).loadLabel(mPackageManager));
return view;
}
public void releaseData()
{
mDialogList.clear();
mPackageManager = null;
mInflater = null;
}
public void sort()
{
if (getCount() > 1)
{
ResolveInfo.DisplayNameComparator rComparator = new ResolveInfo.DisplayNameComparator(mPackageManager);
Collections.sort(mDialogList, rComparator);
}
}
}
public class ShareAppItemClickListener implements DialogInterface.OnClickListener
{
Intent intent = null;
List<ResolveInfo> mShareAppLst = null;
ChooseAppAdapter mAdapter = null;
public ShareAppItemClickListener(Intent intent, List<ResolveInfo> mShareAppLst, ChooseAppAdapter mAdapter)
{
this.intent = intent;
this.mShareAppLst = mShareAppLst;
this.mAdapter = mAdapter;
}
@Override
public void onClick(DialogInterface dialog, int which)
{
Intent resolvedIntent = new Intent(intent);
ResolveInfo info = mShareAppLst.get(which);
ActivityInfo ai = info.activityInfo;
resolvedIntent.setComponent(new ComponentName(ai.applicationInfo.packageName, ai.name));
try
{
startActivity(resolvedIntent);
} catch (Exception ex)
{
ex.printStackTrace();
}
releaseData();
}
public void releaseData()
{
intent = null;
mShareAppLst.clear();
mAdapter.releaseData();
}
}
}
2, share_menu_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal" >
<ImageView
android:id="@+id/menu_icon"
android:layout_width="48dip"
android:layout_height="48dip"
android:layout_marginBottom="2dip"
android:layout_marginLeft="5dip"
android:layout_marginTop="2dip" />
<TextView
android:id="@+id/menu_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee"
android:gravity="center_vertical"
android:paddingLeft="10dip"
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>