转载自:http://blog.youkuaiyun.com/santicom/article/details/7465751
调用所有匹配的第三应用:
- 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>