文件 ==> ==>
正如我在这个图片流中所展示的那样,我的图像(960-Minimalism.jpg)位于内部手机存储中,我正试图通过File类获取它的进一步使用路径。
我还尝试过什么
第一名:
String filePath = MainActivity.this.getFilesDir().getAbsolutePath();
File file = new File(filePath, "960-Minimalism.jpg");
第二
File file = new File(Environment.getExternalStorageDirectory()+ "/Android/data/"+ getApplicationContext().getPackageName()
+ "/Files/"+"960-Minimalism.jpg");
极端硬编码方式:
File file = new File("/data/data/com.example.net/files/","960-Minimalism.jpg")
此处的异常与第一个相同..
我知道我在这里错过了什么或做错了什么但到目前为止都找不到。
任何想法..
修改
请不要认为我有三个问题。以上是我尝试过的解决方案,但没有奏效。但问题是我想要获取内部存储器中的图像路径。这就是我在这里删除我的例外的原因。
答案 0 :(得分:3)
而不是给出路径,你可以做其他方式。打开手机库并选择您需要的文件,然后获取文件uri并使用它。我遇到过类似的问题而且我已经解决了这个问题。有时文件的扩展名为jpeg,但它会显示jpg并给出错误。如果您可以检查文件详细信息以获取正确的文件 扩展
String filepath = Environment.getExternalStorageDirectory().getAbsolutePath() +...(insert specific file path)
Bitmap bitmap = BitmapFactory.decodeFile(filepath);
现在您有了一个可以使用的位图。但是一旦完成以防止内存泄漏,请务必在bit上调用recycle()`方法。
要获取File Uri,您可以尝试使用我从我的某个项目中直接粘贴的代码
Intent i = new Intent(
Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
这将打开图库供您选择图像。一旦你完成了。覆盖onActivityResult方法如下。
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && null != data) {
Uri file = data.getData();
}
else{
// no file selected
}
}
您可以使用此文件Uri来满足您的图像需求。希望它有所帮助。
答案 1 :(得分:2)
Getting access to external storage
要在外部存储上读取或写入文件,您的应用必须获取READ_EXTERNAL_STORAGE或WRITE_EXTERNAL_STORAGE系统权限。例如:
<manifest ...>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
...
</manifest>
如果您需要同时读取和写入文件,那么您只需要WRITE_EXTERNAL_STORAGE
权限,因为它也隐含地要求读取权限。
答案 2 :(得分:2)
对于第二次问题,请将这两项权限添加到Manifest
文件...
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
答案 3 :(得分:1)
我只需改变一点1011建议并获得解决方案。
第一个问题是连接设备(通过数据线),它在内存存储和应用程序之间造成障碍。据我所知,物理连接禁止设备共享其内部存储器和SD卡文件。
对于解决方案,我按照1011的回答做了类似的事情:
Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, RESULT_LOAD_IMAGE);
并且在onActivityResult
内部我抓住了uri并试图通过一点modified way来获取路径......类似于:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK && null != data) {
Uri selectedImageURI = data.getData();
File imageFile = new File(getRealPathFromURI(selectedImageURI));
File file1 = new File(file.getPath());
if(imageFile.exists()){
Toast.makeText(MainActivity.this, "File Exists..:", Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(MainActivity.this, "NOooooooooo..:", Toast.LENGTH_SHORT).show();
}
}else {
// no file selected
}
}
//method to get the real path with file extension
private String getRealPathFromURI(Uri contentURI) {
String result;
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) { // Source is Dropbox or other similar local file path
result = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(idx);
cursor.close();
}
return result;
}
方法getRealPathFromURI(Uri contentUri)
将有助于获得完美文件扩展名的真实路径。