簡體   English   中英

android startActivity sdk23打開圖像崩潰

[英]android startActivity sdk23 open image crash

 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管道08-15 16:48:33.821 24956-24994 / com.example.administrator.readcontact I / OpenGLRenderer:已初始化EGL版本1.4 08-15 15: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 0xa82 0b0b0)08-15 16:52:23.554 24956-24965 / com.example.administrator.readcontact I / zygote:WaitForGcToComplete阻塞了11.170ms,原因是ObjectsAllocated

```↑android監視器中沒有顯示任何錯誤。


圖像的文件路徑是Environment.getExternalStorageDirectory()下的4.jpg ,即“ /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”)。

  • 獲得了讀取外部存儲的權限 。當操作系統詢問我是否允許該操作時,我單擊了“是”。

  • sdk版本為26。因此,我認為該應用在閱讀“ /sdcard/4.jpg”時應獲得許可。

代碼可以進行細微的更改。 希望對您有用。

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM