Android 消息传递之Intent和IntentFilter的匹配规则

intent.action = Intent.ACTION_EDIT intent.setDataAndType(Uri.parse("file://test"),"text/plain") intent.addCategory("com.wdl.intentfliter.category.b") intent.addCategory("com.wdl.intentfliter.category.a") intent.addCategory("com.wdl.intentfliter.category.c") startActivity(intent) } 1 2 3 4 5 6 7 8 9 上面的例子中存在Android 7.0 FileProvider适配问题,请自行解决。 注意:若要同时设置 URI 和 MIME 类型,请勿调用 setData() 和 setType(),因为它们会互相抵消彼此的值。请始终使用 setDataAndType() 同时设置 URI 和 MIME 类型。 为了避免在intent-fliter匹配过程中出现找不到Activity导致的异常闪退问题,提供了2中判断方法: PackageManager的resolveActivity方法 Intent中的resolveActivity方法 如果以上两种方法找不到匹配的Activity,就会返回null。防止出现异常。 btnAction.setOnClickListener { val intent = Intent() intent.action = Intent.ACTION_EDIT intent.type = "text/plain" intent.addCategory("com.wdl.intentfliter.category.b") intent.addCategory("com.wdl.intentfliter.category.a") intent.addCategory("com.wdl.intentfliter.category.c") packageManager.resolveActivity(intent, MATCH_DEFAULT_ONLY)?.let { startActivity(intent) } } 1 2 3 4 5 6 7 8 9 10 11 MATCH_DEFAULT_ONLY: 这个标记位含义是仅仅匹配那些声明了 < category android:name=“android.intent.category.DEFAULT”/>的Activity。 另外PackageManager还提供了queryIntentActivities方法,返回所有匹配成功的Activity。 --------------------- 作者:小淋子 来源:CSDN 原文:https://blog.csdn.net/qq_34341338/article/details/82997517 版权声明:本文为博主原创文章,转载请附上博文链接!
posted @ 2019-06-14 16:14  天涯海角路  阅读(151)  评论(0)    收藏  举报