通过intent action指定类型操作(打开文本,网页,pdf,word,分享...)过滤处理

原创 2015年07月07日 17:53:17


在android中调用应用打开一个网页,文本需要通过intent隐士调用打开,但是在调取的应用列表中,又不符合我们需求的应用或者需要我们指定部分应用可以选择在列表内

那我们如何过滤这个列表应用呢?解决的办法是得到所有能处理ACTION_的应用程序包名,然后根据名字来过滤或者特殊处理。

主要用getPackageManager().queryIntentActivities 查询列表内容,过滤处理。


下面是我在项目做打开pdf文件时过滤掉QQ app在列表选项部分代码:

 Intent it = new Intent();
            it.setAction(android.content.Intent.ACTION_VIEW);
            it.setDataAndType(Uri.fromFile(electronInvoiceFile), "application/pdf");
            it.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

            List<ResolveInfo> resInfo = getPackageManager().queryIntentActivities(it, 0);
         //   int removeAppIndex=-1;
            if (!resInfo.isEmpty()) {
                List<Intent> targetedIntents = new ArrayList<Intent>();
                for (int n=0;n<resInfo.size();n++) {
                    ResolveInfo info =resInfo.get(n);
                    String pkg=info.activityInfo.packageName.toLowerCase();
                    //特殊处理,过滤qq等应用不可用选项,com.tencent.mm /mobileqq
                    if (!pkg.contains("com.tencent")) {
                        Intent chit = new Intent();
                        chit.setPackage(pkg);
                        chit.setAction(android.content.Intent.ACTION_VIEW);
                        chit.setDataAndType(Uri.fromFile(electronInvoiceFile), "application/pdf");
                        targetedIntents.add(chit);
                    }
                }

                /*if(removeAppIndex!=-1) {
                    resInfo.remove(removeAppIndex);
                }*/
                Intent chooserIntent = Intent.createChooser(targetedIntents.remove(0), "选择浏览方式");
                if (chooserIntent == null) {
                    return;
                }
                // A Parcelable[] of Intent or LabeledIntent objects as set with
                // putExtra(String, Parcelable[]) of additional activities to place
                // a the front of the list of choices, when shown to the user with a
                // ACTION_CHOOSER.
                chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, targetedIntents.toArray(new Parcelable[]{}));
                chooserIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                try {
                    getApplicationContext().startActivity(chooserIntent);
                }catch (ActivityNotFoundException e){
                    e.printStackTrace();
                    BDebug.e(getClass().getSimpleName(), "open pdf choose not found");
                    CommonUtility.showToast(getApplicationContext(),"打开pdf失败,请安装pdf查看器后在进行查看!");
                }

            }else{
                CommonUtility.showToast(getApplicationContext(),"打开pdf失败,请安装pdf查看器后在进行查看!");
                return;
            }

以上是过滤特殊应用,还可以进行特殊应用特殊处理方式:例如分享,对邮件,短信,微博,微信需要分享不同信息,需要分别处理

来源:https://trivedihardik.wordpress.com/2013/10/29/app-chooser/

这个例子只过滤留下facebook,twitter,Gmail分享功能.

private void onShareFiltered() {
	Intent emailIntent = new Intent();
	emailIntent.setAction(Intent.ACTION_SEND);
	// Native email client doesn't currently support HTML, but it doesn't
	// hurt to try in case they fix it
	emailIntent.putExtra(Intent.EXTRA_TEXT, shareText.getText().toString());
	emailIntent.putExtra(Intent.EXTRA_SUBJECT,
			getString(R.string.intent_subject));
	emailIntent.setType("message/rfc822");
		PackageManager pm = getPackageManager();
	Intent sendIntent = new Intent(Intent.ACTION_SEND);
	sendIntent.setType("text/plain");
	Intent openInChooser = Intent.createChooser(emailIntent,
			getString(R.string.app_name)
			+ getString(R.string.share_message));
	List resInfo = pm.queryIntentActivities(sendIntent, 0);
	List intentList = new ArrayList();
	for (int i = 0; i < resInfo.size(); i++) {
		// Extract the label, append it, and repackage it in a LabeledIntent
		ResolveInfo ri = resInfo.get(i);
		String packageName = ri.activityInfo.packageName;
		if (packageName.contains("android.email")) {
			emailIntent.setPackage(packageName);
		} else if (packageName.contains("twitter")
			|| packageName.contains("facebook")) {
			Intent intent = new Intent();
			intent.setComponent(new ComponentName(packageName,
					ri.activityInfo.name));
			intent.setAction(Intent.ACTION_SEND);
			intent.setType("text/plain");
			if (packageName.contains("twitter")) {
				intent.putExtra(Intent.EXTRA_TEXT, shareText.getText()
					.toString());
			} else if (packageName.contains("facebook")) {
				// Warning: Facebook IGNORES our text. They say
				// "These fields are intended for users to express themselves. 
                                //Pre-filling these fields erodes the authenticity of the user voice."
				// One workaround is to use the Facebook SDK to post, but
				// that doesn't allow the user to choose how they want to
				// share. We can also make a custom landing page, and the
				// link
				// will show the  text from that page
				// with our link in Facebook.
				intent.putExtra(Intent.EXTRA_TEXT, shareText.getText()
						.toString());
			} else if (packageName.contains("android.gm")) {
				intent.putExtra(Intent.EXTRA_TEXT, shareText.getText()
					.toString());
				intent.putExtra(Intent.EXTRA_SUBJECT,
					getString(R.string.intent_subject));
				intent.setType("message/rfc822");
			}
			intentList.add(new LabeledIntent(intent, packageName, ri
				.loadLabel(pm), ri.icon));
			}
		}

	// convert intentList to array
	LabeledIntent[] extraIntents = intentList
		.toArray(new LabeledIntent[intentList.size()]);
	openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
	startActivity(openInChooser);
}





版权声明:本文为博主原创文章,未经博主允许不得转载。

pdf reference 格式详细说明

1. PDF概要 1.1. 图像模型 PDF能以平台无关、高效率的方式描叙复杂的文字、图形、排版。 PDF 用图像模型来实现设备无关。图像模型允许应用程序以抽象对象描叙文字、图像、图标,而不是通过具体...

android 调用系统程序打开指定文件

private void showAttachment(String fileType, String filepath) { if (fileType.equalsIgnoreCase("jpg"...

android Intent打开各种类型文件((PDF、word、excel、ppt、chm)

//android获取一个用于打开PPT文件的intent public static Intent getPptFileIntent( String param ) { Int...

android打开pdf ppt word excel chm html text 文件的intent

以下代码未经测试。但是有我想找的,先贴过来,慢慢了解~~ import android.app.Activity; import android.content.Intent; impor...

java 操作pdf模板(向指定域添加文本内容和图片)

java 操作pdf模板(向指定域添加文本内容和图片)

C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化

using System;using System.Collections.Generic;using System.Text;using System.IO;using Microsoft.Win3...
  • ljg888
  • ljg888
  • 2011年04月18日 22:00
  • 1680

IOS 打开预览pdf、ppt、excel、word、tet、rtf、csv格式的文件,微信文件分享

IOS 打开预览pdf、ppt、excel、word、tet、rtf、csv格式的文件,微信文件分享

python发送图片|文本|word|pdf格式的邮件

今天分享一下发送邮件。 在说今天最重要的部分之前,先说说pickle吧。 我觉得把一些隐私的数据放在pickle文件中是一个很好的方法。 比如我们今天用到的,发件人的邮箱,发件人的密码,收件人的...
  • ck3207
  • ck3207
  • 2016年07月04日 21:40
  • 832

JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例

以下是Java对几种文本文件内容读取代码。其中,OFFICE文档(WORD,EXCEL)使用了POI控件,PDF使用了PDFBOX控件。   点击这里 查看相关控件的下载地址和配置方法。 ...

JAVA读取WORD,EXCEL,PDF,TXT,RTF,HTML文件文本内容的方法示例

来自:http://blog.csdn.net/zlb824/article/details/7020191 以下是Java对几种文本文件内容读取代码。其中,OFFICE文档(WORD,EX...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:通过intent action指定类型操作(打开文本,网页,pdf,word,分享...)过滤处理
举报原因:
原因补充:

(最多只允许输入30个字)