我在一个应用程序中有两个Activity,MainActivity和SecondActivity。
我想在SecondActivity中使用ACTION_OPEN_DOCUMENT_TREE
操作来选择一个文件夹,但是我从未成功。
本机文件夹选择器会将结果返回给MainActivity,并且永远不会触发两个活动的onActivityResult
。只有在MainActivity中使用ACTION_OPEN_DOCUMENT_TREE
操作时,我的需求才会成功。
以下代码是我的示例
<-- Manifest.xml -->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".SecondActivity"
android:label="@string/title_activity_second"
android:theme="@style/AppTheme.NoActionBar"></activity>
</application>
。
// MainActivity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setSupportActionBar(toolbar)
fab.setOnClickListener { view ->
val intent = Intent(this, SecondActivity::class.java)
intent.flags += Intent.FLAG_ACTIVITY_NO_HISTORY
startActivity(intent)
}
}
。
// SecondActivity
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
setSupportActionBar(toolbar)
fab.setOnClickListener { view ->
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
startActivityForResult(intent, SecondActivity.REQ_CODE)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) // Never run to here
if (requestCode == SecondActivity.REQ_CODE && resultCode == RESULT_OK) {
val selectedFile = data?.data
}
}
所以我的问题是,如何将选择器的返回目标分配给SecondActivity而不是MainActivity?
答案 0 :(得分:1)
根据Intent.FLAG_ACTIVITY_NO_HISTORY,如果设置了onActivityResult
,则不会调用它,这说明了为什么它随后返回您的MainActivity。删除该标记将解决此问题,但是如果您打算保留它,则需要找到另一个解决方法。
如果设置,则新活动不保留在历史记录堆栈中。立刻 用户离开它,活动结束。这可能 也可以使用noHistory属性设置。
如果设置,则在当前活动时永不调用onActivityResult() 开始一项新的活动,设定结果并完成。