Kotlin的意图,排除某些软件包

时间:2019-07-17 19:36:46

标签: android android-intent kotlin

我在排除Kotlin共享意图中的某些软件包时遇到了麻烦。我一直在看这个很棒的帖子/答案(1),但是它给我带来了一些错误,可能是因为从Java到kotlin的转换。我在Intent.EXTRA_INITIAL_INTENTS的工作上遇到了麻烦,但只显示了我给它的数组中的前两个intent。我也尝试过Intent.EXTRA_EXCLUDE_COMPONENTS,但是我根本看不到任何结果(如果有人可以显示一个有效的示例,那将是很棒的)。这是我的意图代码,谢谢您的帮助

val shareIntentsLists = ArrayList<Intent>()
if (!resInfos.isEmpty()) {
    for (resInfo in resInfos) {
        val packageName = resInfo.activityInfo.packageName
        System.out.println(packageName)
        if (packageName.toLowerCase().contains("facebook") or
            packageName.toLowerCase().contains("instagram")) {
            System.out.println(packageName+"l")
            val intent = Intent()
            intent.component = ComponentName(packageName, 
            resInfo.activityInfo.name)
            intent.action = Intent.ACTION_SEND
            intent.type = "image/*"
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            intent.setPackage(packageName)
            intent.setType(activity?.getContentResolver().getType(contentUri))
            intent.putExtra(Intent.EXTRA_STREAM, contentUri)
            shareIntentsLists.add(intent)
        }
    }
}

val chooserIntent = Intent.createChooser( Intent(), "Choose app to share")
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
shareIntentsLists.toTypedArray())
activity?.startActivity(chooserIntent)

1 个答案:

答案 0 :(得分:0)

val chooserIntent = Intent.createChooser( Intent(), "Choose app to share")

    chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
    shareIntentsLists.toTypedArray())
    activity?.startActivity(chooserIntent)`

应为:

    val chooserIntent = Intent.createChooser( intent, "Choose app to share")
    chooserIntent.putExtra(Intent.EXTRA_STREAM, 
    shareIntentsLists.toTypedArray())
    activity?.startActivity(chooserIntent)

其原因是因为Intent()正在创建一个新的intent实例(它是一个构造函数调用),但是intent是您已定义和修改的对象