sd卡没有写入权限怎么获取权限
您的每一个用心回答,都会让这个世界变得更美好一些!
package com.example.cdcarddemoavtivity; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import android.Manifest; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.util.ArrayList; import java.util.List; public class SDCardDemoActivity extends AppCompatActivity implements View.OnClickListener { private static final String TAG = "SDCardDemoActivity"; private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.avtivity_cd_card); button = (Button) this.findViewById(R.id.write_data_button); button.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.write_data_button: Log.d(TAG, "获取权限"); Toast.makeText(this, "获取读写权限", Toast.LENGTH_SHORT).show(); r_w_permission(v); break; } } //存文件方法 public void sd_card() { //获取sd卡路径 File sdCard = Environment.getExternalStorageDirectory(); Log.d(TAG, "Ext_file_path == " + sdCard); try { //把数据写到sd卡上 // File filePath = new File("/storage/emulated/0"); File file = new File(sdCard, "info.text"); FileOutputStream fos = new FileOutputStream(file); fos.write("11111".getBytes()); fos.close(); } catch (Exception e) { e.printStackTrace(); } } //查询是否有读写权限 private void r_w_permission(View v) { List<String> permissionList = new ArrayList<>(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CALENDAR) != PackageManager.PERMISSION_GRANTED) { //如果不等于说明没有权限。需要申请权限 //ActivityCompat.requestPermissions 方法 用于申请权限,第二个参数为 所需权限数组,也就是可申请一个,或多个权限。第三个参数为 requestCode 回调的时候使用 permissionList.add(Manifest.permission.READ_CALENDAR); } if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_CALENDAR) != PackageManager.PERMISSION_GRANTED) { permissionList.add(Manifest.permission.WRITE_CALENDAR); } if (!permissionList.isEmpty()) { ActivityCompat.requestPermissions(this, permissionList.toArray(new String[permissionList.size()]), 1); } else { sd_card(); } } /** * 处理权限要实现 onRequestPermissionsResult 方法,该方法有三个参数 * <p> * requestCode 和申请权限时 requestCode 对应, * permissions 申请的权限数组 * grantResults 申请结果 * * @param requestCode 请求码 * @param permissions 请求权限 * @param grantResults 授权结果 */ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case 1: int resultLength = grantResults.length; if (resultLength > 0) { for (int grantCode : grantResults) { if (grantCode == PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "授权成功", Toast.LENGTH_SHORT).show(); sd_card(); } else { Toast.makeText(this, "授权失败", Toast.LENGTH_SHORT).show(); } } } break; default: break; } } }
一楼说得对
首先是权限声明,在清单文件里进行配置。
然后是如果6.0+的版本,某些权限是需要动态获取的
https://www.sunofbeach.net/a/1192351879502237696
如果是Android10以上的版本
https://developer.android.com/about/versions/10/privacy
以上
一楼说得对
首先是权限声明,在清单文件里进行配置。
然后是如果6.0+的版本,某些权限是需要动态获取的
https://www.sunofbeach.net/a/1192351879502237696
如果是Android10以上的版本
https://developer.android.com/about/versions/10/privacy
以上