findViewById(R.id.openImage).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
File f = new File(Environment.getExternalStorageDirectory(), "4.jpg");
Intent i = new Intent(Intent.ACTION_VIEW);
if (f.exists()) {
Uri uri = Uri.fromFile(f);
i.setDataAndType(uri, "image/jpeg");
startActivity(i);
}
else
{
Toast.makeText(MainActivity.this, "File not Exist", Toast.LENGTH_SHORT).show();
}
}
});
↑当我按一下按钮,就应该启动打开一个图像。但是它只是崩溃而不引发任何错误,如下面的Android的监视器显示的活动。的Android startActivity sdk23打开的图像崩溃
08-15 16:48:33.715 24956-24994/com.example.administrator.readcontact d/OpenGLRenderer:慧深GL管道 08-15 16:48:33.821 24956-24994/com.example.administrator .readcontact I/OpenGLRenderer:初始化的EGL,版本1.4 08-15 16:48:33.821 24956-24994/com.example.administrator.readcontact D/OpenGLRenderer:交换行为1 08-15 16:48:33.821 24956-24994 /com.example.administrator.readcontact W/OpenGLRenderer:无法使用EGL_SWAP_BEHAVIOR_PRESERVED选择配置,正在重试... 08-15 16:48:33.821 24956-24994/com.example.administrator.readcontact D/OpenGLRenderer:交换行为0 08-15 16:48:33.857 24956-24994/com.example.administrator.readcontact D/EGL_emulation:eglCreateContext:0xa8232400:maj 2 min 0 rcv 2 08-15 16:48:33.883 24956-24994/com.example.administrator.readcontact D/EGL_emulation:eglMakeCurrent:0xa8232400:ver 2 0(tinfo 0xa820b0b0) 08 -15 16:48:34.073 24956-24994/com.example.administrator.readcontact D/EGL_emulation:eglMakeCurrent:0xa8232400:ver 2 0(tinfo 0xa820b0b0) 08-15 16:52:23.554 24956-24965/com.example。 administrator.readcontact I /合子:WaitForGcToComplete阻塞11.170ms为原因ObjectsAllocated
``` ↑没有在机器人监视器中显示的任何错误。
的图像的文件路径是4.JPG下Environment.getExternalStorageDirectory(),即 “/sdcard/4.jpg”。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
↑我加入这个代码
int ok1 = ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE);
if (ok1 != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
REQUEST_EXTERNAL_STORAGE_READ);
}
↑我得读取外部存储的权限。
我可以肯定的是:
的文件路径是正确的,因为当我试图在ImageView的打开文件路径( “/ SD卡/ 4.JPG”) it 成功。
我有获得了许可来读取外部存储。当操作系统询问我是否允许操作时,我点击了“是”。
sdk版本是26。所以我觉得应用程序在阅读“/ sdcard/4时应该获得许可。JPG”
要查看原生图库应用正确的文件? –
是的,我看到了一个教程打开图像很容易在系统中使用较低的sdk版本。但我在sdk26上运行它... –