android过滤第三应用列表

 

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>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值