gpt4 book ai didi

共享临时文件的 Android 问题

转载 作者:行者123 更新时间:2023-12-05 00:13:49 25 4
gpt4 key购买 nike

我正在尝试创建一个临时文件并共享它。所以我创建了这个类:

public class GenerateFile {

public static File writeToFile(Context mcoContext, String sBody) {

String fileName = "LOG FILE_" + String.valueOf(System.currentTimeMillis()) +".txt";
File file = new File(mcoContext.getCacheDir(), fileName);

try{
FileWriter writer = new FileWriter(file);
writer.append(sBody);
writer.flush();
writer.close();
return file;

}catch (Exception e){
Toast.makeText(mcoContext, "File write failed: " + e.toString(), Toast.LENGTH_LONG).show();
}
return null;
}
}

生成一个文件,之后我将在这里分享:

String logContent = "123";
File filePath = new File(file.getAbsolutePath(), "external_files");
filePath.mkdir();
Uri uri = FileProvider.getUriForFile(StatusActivity.this, getPackageName(), filePath);

Intent intent = ShareCompat.IntentBuilder.from(StatusActivity.this)
.setStream(uri) // uri from FileProvider
.setType("text/html")
.getIntent()
.setAction(Intent.ACTION_VIEW) //Change if needed
.setDataAndType(uri, "text/*")
.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);

并且在 list 中已经有这个权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>
<uses-permission android:name="com.sec.android.provider.badge.permission.READ"/>

和提供者声明

 <provider
android:name="android.support.v4.content.FileProvider"
android:authorities="android.getqardio.com.gmslocationtest"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"/>
</provider>

provider_paths 类是这样定义的:

<?xml version="1.0" encoding="utf-8"?>
<paths>
<files-path
name="share"
path="external_files"/>
</paths>

但是当我尝试通过邮件或电报“无法附加文件”或“不支持的附件”共享它时,它会生成消息。此外,在我看来,该文件未创建。

最佳答案

其他应用无法访问您应用的 getCacheDir()FLAG_GRANT_READ_URI_PERMISSIONFLAG_GRANT_WRITE_URI_PERMISSION 用于 content Uri 值,而不是 file Uri 值。而且,在 Android 7.0+ 设备上,您的代码应该会因 FileUriExposedException 而崩溃。

Use FileProvider使您的内容对其他应用程序可用,并使用 FileProvider.getUriForFile() 获取 Uri 以放入 Intent

关于共享临时文件的 Android 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56850860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com