0
  • 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;
            }
        }
    }
    


    1321724032860676096  评论     打赏       王勇
    • 拉大锯  回复 @王勇
      你告诉我,这是啥权限?Manifest.permission.READ_CALENDAR
      拉大锯 2020-11-04 13:54   回复 1153952789488054272
    • 拉大锯  回复 @王勇
      这个又是啥权限Manifest.permission.WRITE_CALENDAR
      拉大锯 2020-11-04 13:54   回复 1153952789488054272
    • 王勇  回复 @拉大锯
      0.0
      王勇 2020-11-04 14:14   回复 1321724032860676096
  • 一楼说得对

    1139423796017500160  评论     打赏       断点-含光君
    • 首先是权限声明,在清单文件里进行配置。


      然后是如果6.0+的版本,某些权限是需要动态获取的


      https://www.sunofbeach.net/a/1192351879502237696


      如果是Android10以上的版本


      https://developer.android.com/about/versions/10/privacy


      以上

      1153952789488054272  评论     打赏       拉大锯
      相关问题
      2020-02-04 23:45 1059 2
      匿名 · sd卡
      2020-04-15 02:23 334 2
      幻影~ · 安卓
      2024-04-26 19:25 2 4
      deanhu · AOSP
      2024-04-25 21:53 3 10
      幻影~ · 提问
      2024-04-13 20:13 10 2
      幻影~ · 找工作
      2024-04-07 10:44 16 2
      幻影~ · 问题
      2024-03-31 17:20 7 2
      TONYGFX · AOSP
      2024-03-28 17:11 4 2