android startActivity sdk23打开图像崩溃

时间:2017-08-16 09:15:59

标签: android android-activity

 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监视器所示。

  

08-15 16:48:33.715 24956-24994 / com.example.administrator.readcontact D / OpenGLRenderer:HWUI GL Pipeline   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 / zygote:WaitForGcToComplete被阻止11.170ms因为ObjectsAllocated

``` ↑android监视器中没有显示任何错误。

Environment.getExternalStorageDirectory()下的图片文件路径为 4.jpg ,即&#34; /sdcard/4.jpg"。< / p>

<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中打开文件路径(&#34; /sdcard/4.jpg") 成功

  • 获得了许可来阅读外部存储空间。我点击了&#34;是&#34;当os问我是否允许手术时。

  • sdk版本为26 。所以我认为该应用应该在阅读&#34; /sdcard/4.jpg"

  • 时获得许可

1 个答案:

答案 0 :(得分:0)

代码可以进行细微的改动。希望它对你有用。

File file = new File(Environment.getExternalStorageDirectory(), "4.jpg");
            Intent intent = new Intent ();
            intent.setAction(Intent.ACTION_VIEW);
            Uri uri = Uri.fromFile(file);
            intent.setDataAndType(uri,"image/*");
            startActivity(intent);