Android: decodeFile always returns null for file in internal storage

后端 未结 7 1541
长情又很酷
长情又很酷 2020-12-09 16:59

I have a file saved locally into the application\'s private storage. I have verified it exists, however whenever I call BitmapFactory.decodeFile it always retur

相关标签:
7条回答
  • 2020-12-09 17:12

    Could you try fileList()? It

    returns an array of strings naming the private files associated with this Context's application package.

    0 讨论(0)
  • 2020-12-09 17:13

    This question has been answered before such as here: BitmapFactory.decodeFile returns null even image exists

    This was exactly what I needed:

    String fname=new File(getFilesDir(), "test.png").getAbsolutePath();
    
    0 讨论(0)
  • 2020-12-09 17:16

    For me I was getting image from locally saved URL something like "file:///storage/emulated/0/...." (I have used Phonegap plugin to capture image. Plugin was giving me image path, which I need to use in native code)

    Here is the code snippet which worked for me.

    String captured_image_info = "file:///storage/emulated/0/Android/data/com.testapp/cache/1493809796526.jpg"
    Uri uri=Uri.parse(captured_image_info);
    largeLog("uri", "" + uri);
    
    InputStream imageStream = getContentResolver().openInputStream(uri);
    
    Bitmap bm = BitmapFactory.decodeStream(imageStream);
    
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    
    bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object
    
    byte[] decodedBytes = baos.toByteArray();
    
    Bitmap img_captured_image = BitmapFactory.decodeByteArray(decodedBytes, 0, decodedBytes.length);
    
    0 讨论(0)
  • 2020-12-09 17:19

    Folks, files stored in app resource should be referenced in special way. E.g. if file is located in assets and named as "myfile.png" it has to be referenced as:

    String uriString="file:///android_asset/myfile.png";
    Uri uri=Uri.parse(uriString);
    
    0 讨论(0)
  • 2020-12-09 17:22

    Instead of using BitmapFactory.decodeFile, try using InputStream:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
        super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
    
        if(resultCode == RESULT_OK){          
            Uri selectedImage = imageReturnedIntent.getData();
            InputStream imageStream = getContentResolver().openInputStream(selectedImage);
            Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream);
    
    0 讨论(0)
  • 2020-12-09 17:27

    You need to setup run-time permissions for Manifest.permission.READ_EXTERNAL_STORAGE If you don't you'll get a null without getting any error message or even an indication in the Log. Note that you need to request the permissions both in the Manifest and at run time.

    0 讨论(0)
提交回复
热议问题