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 
版权声明:本文为博主原创文章,转载请附上博文链接!
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号