如何解决没有权限将文件保存到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 举报,一经查实,本站将立刻删除。