下面的所有代码都在 BackupRestoreActivity.kt
class BackupRestoreActivity : AppCompatActivity(), ActivityCompat.OnRequestPermissionsResultCallback {.....
Intent 将数据库文件的副本附加到电子邮件中。数据库文件位于临时位置。电子邮件完成后,活动结果回调应开始从其临时位置删除数据库文件。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
startEmailActivity = registerForActivityResult(StartActivityForResult()
) { result :ActivityResult ->
if (result.resultCode == RESULT_OK) {
val file = File(mediaStorageDir, backupFileName)
file.delete()
}
} .......
和
// Attach backup file to default email
private fun composeEmail(dirPath :File, backupFileName :String) {
val intent = Intent(Intent.ACTION_SENDTO).apply {
data = Uri.parse("mailto:") // only email apps should handle this
putExtra(Intent.EXTRA_EMAIL, "")
putExtra(Intent.EXTRA_SUBJECT, "Fragments backup attached")
putExtra(Intent.EXTRA_TEXT, ":)")
putExtra(Intent.EXTRA_STREAM, Uri.parse("file://$dirPath/$backupFileName"))
}
startEmailActivity.launch(intent)
return
}
电子邮件在 Gmail 中创建,并附有备份文件。我发送电子邮件但当我的应用程序恢复时它不会在 BackupRestoreActivity 恢复(运行 ActivityResult 的 File.delete(),如上面的第一个代码块所示。)相反,我的应用程序在其主屏幕 MainActivity 恢复。文件删除不会发生。
我在 IDE 中使用 API 28 仿真,并使用设备文件资源管理器检查了文件位置。备份副本文件被创建。电子邮件步骤工作正常。任何关于为什么我没有成功使用 ActivityResult 的 File.delete() 的想法将不胜感激!