美文网首页
IntentFliter

IntentFliter

作者: 简爱WindMan | 来源:发表于2017-02-27 18:18 被阅读21次

意图过滤器:a.三类信息action、category、data。

b.不一定三类信息都要有;每一类可有多个;

c.一个activity可有多个intent-filter,匹配其中一个即可。

1.action匹配规则

1.1    字符串,系统已经定义了一些,自己也可以定义。

1.2    必须完全一样,区分大小写。

1.3    如果目标指定了action,跳转时必须有action且只有由一个匹配就ok。

2.category匹配规则

2.1    字符串,系统有,也可自定义。

2.2    如果Intent中有则每个都必须和过滤规则中的对应。

2.3    intent中可以没有,因为系统默认为它创建android.intent.category.DEFAULT。

2.4    隐式intent必须为其指定默认category。

3.data匹配规则

3.1    分为两部分:URI和mimeType

3.1.1URI:://:/||

例如:http://www.baidu.com:80/serch/info

content://com.xmc.windman:200/folder/subfolder/etc

参数含义:Scheme:URI的模式(http、file、content等,后两个为默认值),少此无效。

Host:URI的主机名(www.baidu.com),少此无效。

Port:URI的端口号(80),前两个指定,此参数才有效。

path:完整路径。

pathPattern:完整路径,可包含通配符"*",0个以上字符,由于正则表达式的规范,"*"要写成"\\*","\"要写成"\\\\"。

pathprefix:路径的前缀信息。

3.1.2    mimeType:媒体类型,如image/jpeg、audio/mpeg4-generic、video/*。

3.2    过滤中定义了data,intent中必须有data。如果过滤中只有mimeType,但他有默认值,intent中的Scheme必须指定为content或者file

3.3    如果想为intent指定完整data,必须调用setDataAndType,不能先setData然后再setType,因为两者会相互清空。

3.4    如果过滤中指定了两组完整的data,匹配其中一条即可。

3.5    data可分开写,如:;,。

4.    对应Service和BroadcastReceiver,intent-filter规则一样,但是系统建议Service显式调用 。.

5.    隐式intent判断null方法,如果不判断匹配不成功时会报错。

5.1    PackageManager或者Intent的resolveActivity。返回最佳匹配,如果找不到返回null

5.2    PackageManager的queryIntentActivityies,返回所有匹配成功的Activity。

5.3    两个方法都是两个参数的,第一个参数是Intent,第二个是标志位,传DEFALUT_ONLY。表示只接受category为defalt的,隐式必须有defalt的category。

5.4特殊action和category:android.intent.action.MAIN和android.intent.category.LAUNCHER。而这缺一不可,表示程序入口。

5.5    Service和broadcastReceiver, PackageManager也提供同样的方法。

public class OpenFiles {

//android获取一个用于打开HTML文件的intent

    public static IntentgetHtmlFileIntent(File file) {

Uri uri = Uri.parse(file.toString()).buildUpon().encodedAuthority("com.android.htmlfileprovider").scheme("content").encodedPath(file.toString()).build();

        Intent intent =new Intent("android.intent.action.VIEW");

        intent.setDataAndType(uri, "text/html");

        return intent;

    }

//android获取一个用于打开图片文件的intent

    public static IntentgetImageFileIntent(File file) {

Intent intent =new Intent("android.intent.action.VIEW");

        intent.addCategory("android.intent.category.DEFAULT");

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        Uri uri = Uri.fromFile(file);

        intent.setDataAndType(uri, "image/*");

        return intent;

    }

//android获取一个用于打开PDF文件的intent

    public static IntentgetPdfFileIntent(File file) {

Intent intent =new Intent("android.intent.action.VIEW");

        intent.addCategory("android.intent.category.DEFAULT");

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        Uri uri = Uri.fromFile(file);

        intent.setDataAndType(uri, "application/pdf");

        return intent;

    }

//android获取一个用于打开文本文件的intent

    public static IntentgetTextFileIntent(File file) {

Intent intent =new Intent("android.intent.action.VIEW");

        intent.addCategory("android.intent.category.DEFAULT");

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        Uri uri = Uri.fromFile(file);

        intent.setDataAndType(uri, "text/plain");

        return intent;

    }

//android获取一个用于打开音频文件的intent

    public static IntentgetAudioFileIntent(File file) {

Intent intent =new Intent("android.intent.action.VIEW");

        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        intent.putExtra("oneshot", 0);

        intent.putExtra("configchange", 0);

        Uri uri = Uri.fromFile(file);

        intent.setDataAndType(uri, "audio/*");

        return intent;

    }

//android获取一个用于打开视频文件的intent

    public static IntentgetVideoFileIntent(File file) {

Intent intent =new Intent("android.intent.action.VIEW");

        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

        intent.putExtra("oneshot", 0);

        intent.putExtra("configchange", 0);

        Uri uri = Uri.fromFile(file);

        intent.setDataAndType(uri, "video/*");

        return intent;

    }

//android获取一个用于打开CHM文件的intent

    public static IntentgetChmFileIntent(File file) {

Intent intent =new Intent("android.intent.action.VIEW");

        intent.addCategory("android.intent.category.DEFAULT");

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        Uri uri = Uri.fromFile(file);

        intent.setDataAndType(uri, "application/x-chm");

        return intent;

    }

//android获取一个用于打开Word文件的intent

    public static IntentgetWordFileIntent(File file) {

Intent intent =new Intent("android.intent.action.VIEW");

        intent.addCategory("android.intent.category.DEFAULT");

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        Uri uri = Uri.fromFile(file);

        intent.setDataAndType(uri, "application/msword");

        return intent;

    }

//android获取一个用于打开Excel文件的intent

    public static IntentgetExcelFileIntent(File file) {

Intent intent =new Intent("android.intent.action.VIEW");

        intent.addCategory("android.intent.category.DEFAULT");

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        Uri uri = Uri.fromFile(file);

        intent.setDataAndType(uri, "application/vnd.ms-excel");

        return intent;

    }

//android获取一个用于打开PPT文件的intent

    public static IntentgetPPTFileIntent(File file) {

Intent intent =new Intent("android.intent.action.VIEW");

        intent.addCategory("android.intent.category.DEFAULT");

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        Uri uri = Uri.fromFile(file);

        intent.setDataAndType(uri, "application/vnd.ms-powerpoint");

        return intent;

    }

//android获取一个用于打开apk文件的intent

    public static IntentgetApkFileIntent(File file) {

Intent intent =new Intent();

        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        intent.setAction(android.content.Intent.ACTION_VIEW);

        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");

        return intent;

    }

}

相关文章

  • IntentFliter

    意图过滤器:a.三类信息action、category、data。 b.不一定三类信息都要有;每一类可有多个; c...

网友评论

      本文标题:IntentFliter

      本文链接:https://www.haomeiwen.com/subject/drttgttx.html