微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

没有权限将文件保存到adnroid Studio上的SDCard

如何解决没有权限将文件保存到adnroid Studio上的SDCard

我试图将文件保存到我的设备。我在清单中添加了权限,该应用程序确实要求我提供访问存储的权限,但是当我单击“保存文件”时,我的“权限失败”弹出。也许我没有正确要求许可。我在三星S10和仿真器上以及两个设备上都尝试了它不起作用。 如果我尝试第二次在我的真实设备上使用它,该应用程序将崩溃。但是,这不会在模拟器上发生 希望可以有人帮帮我。 已经谢谢了。

/////代码

package com.example.writeexeternalstorage;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.security.Permission;

public class MainActivity extends AppCompatActivity {

    EditText fileName;
    EditText text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Here,thisActivity is the current activity

        if (ContextCompat.checkSelfPermission(this,Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
        }

        if (ContextCompat.checkSelfPermission(this,Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},1);
        }
        setContentView(R.layout.activity_main);



        setContentView(R.layout.activity_main);
    }

    private boolean isExternalStorageWriteable(){
        if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
            return true;
        }else{
            return false;
        }
    }

    public void writeFile(View v){
        if(isExternalStorageWriteable() && checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
            File textFile = new File(Environment.getExternalStorageDirectory(),fileName.toString());

            try {
                FileOutputStream fos = new FileOutputStream(textFile);
                fos.write(text.getText().toString().getBytes());
                fos.close();

                Toast.makeText(this,"File saved",Toast.LENGTH_SHORT).show();
            } catch (IOException e) {
                e.printstacktrace();
            }

        }else if(isExternalStorageWriteable() == false)
        {
            Toast.makeText(this,"External Storage is not writable",Toast.LENGTH_SHORT).show();
        }

        else if(checkPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == false) {
            Toast.makeText(this,"Permission Failed",Toast.LENGTH_SHORT).show();
        }

    }

    public boolean checkPermission(String permission){
        int check = ContextCompat.checkSelfPermission(this,permission);
        return (check == PackageManager.PERMISSION_GRANTED);
    }
}

解决方法

如果您在大于29的API级别上使用Environment.getExternalStorageDirectory(),则它将不起作用,因为android从API级别29开始已弃用此函数。 希望this会回答您的问题。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。