当我尝试打开文件时,应用程序崩溃了.它可以在Android Nougat下运行,但在Android Nougat上它会崩溃.当我尝试从SD卡打开文件而不是从系统分区打开文件时,它只会崩溃.一些许可问题?
示例代码:
File file = new File("/storage/emulated/0/test.txt");
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file), "text/*");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent); // Crashes on this line
Run Code Online (Sandbox Code Playgroud)
日志:
android.os.FileUriExposedException:file:///storage/emulated/0/test.txt通过Intent.getData()暴露在app之外
编辑:
在定位Android Nougat时,file://不再允许使用URI.我们应该使用content://URI代替.但是,我的应用程序需要打开根目录中的文件.有任何想法吗?
我需要仅使用文件名来显示图像,而不是使用资源ID.
ImageView imgView = new ImageView(this);
imgView.setBackgroundResource(R.drawable.img1);
Run Code Online (Sandbox Code Playgroud)
我在drawable文件夹中有图像img1.我希望从文件中显示该图像.
我怎样才能做到这一点?
我正在尝试将我的文件保存到以下位置,
FileOutputStream fos = new FileOutputStream("/sdcard/Wallpaper/"+fileName);
但是我得到了异常java.io.FileNotFoundException
但是,当我把路径保存"/sdcard/"起来的时候.
现在我假设我无法以这种方式自动创建目录.
有人可以建议如何创建directory and sub-directory使用代码吗?
谁能告诉我之间的差异file.mkdir()
和file.mkdirs()?
这一行:
final FileOutputStream outputStream = new FileOutputStream(name);
Run Code Online (Sandbox Code Playgroud)
结果FileNotFoundException是消息是/2ozjfFQzwv: open failed: EROFS (Read-only file system)"2ozjfFQzwv"是我传递的文件名.
我在没有得到WRITE_INTERNAL_STORAGE许可的情况下尝试了这个.如何创建此文件进行编写?
或者,我只是希望能够为新活动提供图像,并且它太大而无法将其序列化.有没有比将其写入文件然后再次从中读取更简单的方法?这里的所有问题似乎都是关于写入SD卡,我不想这样做,因为很多人没有SD卡插槽.
嗨,我正在寻找列出来自root/Android设备的所有文件的解决方案.
假设根目录中有3个文件夹,但我想在一个列表中显示所有这些文件夹中的所有文件.
现在如果我正在使用
File f=new File("/sdcard");
Run Code Online (Sandbox Code Playgroud)
然后它将仅列出sdcard文件夹中的所有文件.如果我将使用
File f=new File("/download");
Run Code Online (Sandbox Code Playgroud)
然后它将仅列出下载文件夹中的所有文件..如果我将使用
File f=new File("/");
Run Code Online (Sandbox Code Playgroud)
然后它将仅列出root direcoty文件...而不是/ sdcard或/ download中的文件.
那么我应该遵循哪些步骤来列出所有带有过滤器的文件,以便仅列出root中所有文件夹中的.csv文件.
谢谢..
在我的应用程序中,我添加了为日常添加和保存图片的可能性,以a表示Fragment.
为了将图片保存在SD卡上,我目前使用的功能是File.createTempFile:
File imageFile = File.createTempFile(imageFileName, MyApplication.JPEG_FILE_SUFFIX, MyApplication.getAlbumDir());
Run Code Online (Sandbox Code Playgroud)
我实际上也尝试过标准方式:
File imageFile = new File(MyApplication.getAlbumDir(), imageFileName + MyApplication.JPEG_FILE_SUFFIX);
Run Code Online (Sandbox Code Playgroud)
两者都有效,但在我的情况下,第一个比第二个更好,因为该函数createTempFile在文件名的末尾添加一个长的随机数,使其唯一.
举个例子,这是我用两种方法得到的:
使用createTempFile:IMG_2013-06-18_-1961144729.jpg
使用新文件:IMG_2013-06-18_.jpg
最后我的问题是,保持使用createTempFile以保存我的照片是否安全,或者我是否必须使用标准方式并添加一些代码来生成唯一的文件名?它应该只用于临时文件吗?
我查看了有关该功能的文档,但我没有找到任何关于使用它而不是使用它的可能后果new File.
谢谢
我有两个主要问题.
我的android应用程序中有一个数据库.我用java创建它
class as follows.
public DataBaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
public DataBaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version, DatabaseErrorHandler errorHandler) {
super(context, name, factory, version, errorHandler);
}
@Override
public void onCreate(SQLiteDatabase db) {
// creating required tables
db.execSQL(CREATE_TABLE_QUOTES);
db.execSQL(CREATE_TABLE_FILTERS);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// on upgrade drop older tables
db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUOTES);
db.execSQL("DROP TABLE IF EXISTS " + TABLE_QUOTES);
// create new …Run Code Online (Sandbox Code Playgroud) 我的目标是在内部存储上创建XML文件,然后通过共享Intent发送它.
我可以使用此代码创建XML文件
FileOutputStream outputStream = context.openFileOutput(fileName, Context.MODE_WORLD_READABLE);
PrintStream printStream = new PrintStream(outputStream);
String xml = this.writeXml(); // get XML here
printStream.println(xml);
printStream.close();
Run Code Online (Sandbox Code Playgroud)
我试图将Uri检索到输出文件以便共享它.我首先尝试通过将文件转换为Uri来访问该文件
File outFile = context.getFileStreamPath(fileName);
return Uri.fromFile(outFile);
Run Code Online (Sandbox Code Playgroud)
这将返回file:///data/data/com.my.package/files/myfile.xml但我似乎无法将其附加到电子邮件,上传等.
如果我手动检查文件长度,它是正确的,并显示有一个合理的文件大小.
接下来,我创建了一个内容提供程序并尝试引用该文件,它不是该文件的有效句柄.在ContentProvider没有以往任何时候都似乎被称为任意点.
Uri uri = Uri.parse("content://" + CachedFileProvider.AUTHORITY + "/" + fileName);
return uri;
Run Code Online (Sandbox Code Playgroud)
这将返回内容://com.my.package.provider/myfile.xml但我检查文件并且它的长度为零.
如何正确访问文件?我是否需要使用内容提供商创建文件?如果是这样,怎么样?
更新
这是我用来分享的代码.如果我选择Gmail,它会显示为附件,但是当我发送它时会出现错误无法显示附件,并且到达的电子邮件没有附件.
public void onClick(View view) {
Log.d(TAG, "onClick " + view.getId());
switch (view.getId()) {
case R.id.share_cancel:
setResult(RESULT_CANCELED, getIntent());
finish();
break;
case R.id.share_share:
MyXml …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的媒体播放器播放背景.它从apk调用文件,但我希望它可以从任何目录播放,如音乐或SD卡.
这是我的代码:
private MediaPlayer mpintro;
.
.
mpintro = MediaPlayer.create(this, R.raw.intro);
mpintro.setLooping(true);
mpintro.start();
Run Code Online (Sandbox Code Playgroud) android ×10
android-file ×10
directory ×1
file ×1
file-io ×1
filesystems ×1
imageview ×1
java ×1
sqlite ×1