代码之家  ›  专栏  ›  技术社区  ›  Wai Yan Hein

在Android中保存文件时权限被拒绝

  •  -1
  • Wai Yan Hein  · 技术社区  · 8 年前

    我正在开发一个Android应用程序。在我的应用程序中,我将位图保存为文件。但即使我在清单文件中设置了正确的权限,它也会引发权限拒绝异常。

    这是我将位图保存为文件的方式

    private void downloadImage(Bitmap bitmap)
        {
            try{
                String fileName = String.valueOf(System.currentTimeMillis())+".jpeg";
                File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), fileName);
    
                if(file.exists()){
                    file.delete();
                }
    
                OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, os);
    
    
                Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
                Uri contentUri = Uri.fromFile(file);
                mediaScanIntent.setData(contentUri);
                sendBroadcast(mediaScanIntent);
                Toast.makeText(getBaseContext(),"Image saved to your device",Toast.LENGTH_SHORT).show();
            }
            catch (IOException e)
            {
                Toast.makeText(getBaseContext(),e.getMessage(),Toast.LENGTH_SHORT).show();
            }
        }
    

    当我存钱的时候,这是在向我这样的错误致敬。

    enter image description here

    这些是我在清单文件中设置的所有权限。

     <uses-permission android:name="android.permission.WAKE_LOCK"/>
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-feature android:name="android.hardware.camera" />
        <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
        <uses-permission android:name="android.permission.CAMERA" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    为什么会抛出错误?如何更正我的代码?

    1 回复  |  直到 6 年前
        1
  •  3
  •   beta    8 年前

    我猜你是为Android开发的?对于Andorid M,您必须在运行时获得权限。

    请看 here .

    搜索“Android M运行时权限”,您将找到成千上万的示例和解释。