亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

android6.0中如何寫入SD卡權限

發布時間:2022-04-18 11:20:30 來源:億速云 閱讀:154 作者:iii 欄目:開發技術

本文小編為大家詳細介紹“android6.0中如何寫入SD卡權限”,內容詳細,步驟清晰,細節處理妥當,希望這篇“android6.0中如何寫入SD卡權限”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。

代碼如下:

package com.example.admin.sdapplication;

import android.Manifest;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;

public class SdkActivity extends AppCompatActivity implements View.OnClickListener{
 private Button btn_write;
 private Button btn_read;
 final int REQUEST_WRITE=1;//申請權限的請求碼
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_sdk);

  btn_write= (Button) findViewById(R.id.btn_write);
  btn_read= (Button) findViewById(R.id.btn_read);
  btn_read.setOnClickListener(this);
  btn_write.setOnClickListener(this);
 }

 private void showAlert(){
  Dialog alertDialog = new AlertDialog.Builder(this).
    setTitle("權限說明").
    setMessage("我們需要這個權限給你提供存儲服務").
    setIcon(R.drawable.ic_launcher).
    setPositiveButton("確定", new DialogInterface.OnClickListener() {

     @Override
     public void onClick(DialogInterface dialog, int which) {
      // TODO Auto-generated method stub
      //2、申請權限: 參數二:權限的數組;參數三:請求碼
      ActivityCompat.requestPermissions(SdkActivity.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE);
     }
    }).
    setNegativeButton("取消", new DialogInterface.OnClickListener() {

     @Override
     public void onClick(DialogInterface dialog, int which) {
      // TODO Auto-generated method stub
     }
    }).
    create();
  alertDialog.show();
 }
 @Override
 public void onClick(View view) {
  switch (view.getId()){
   case R.id.btn_read:
    String s= readToSdCard();
    Log.i("readTosdCard",s);
    break;
   case R.id.btn_write:
    //判斷是否6.0以上的手機 不是就不用
    if(Build.VERSION.SDK_INT>=23){
     //判斷是否有這個權限
     if(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){
      //第一請求權限被取消顯示的判斷,一般可以不寫
      if (ActivityCompat.shouldShowRequestPermissionRationale(SdkActivity.this,
        Manifest.permission.WRITE_EXTERNAL_STORAGE)){
       Log.i("readTosdCard","我們需要這個權限給你提供存儲服務");
       showAlert();
      }else {
       //2、申請權限: 參數二:權限的數組;參數三:請求碼
       ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE);
      }
     }else {
      writeToSdCard();
     }
    } else{
     writeToSdCard();
    }
    break;
  }
 }

 //寫數據
 public void writeToSdCard(){
  //1、判斷sd卡是否可用
  if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
   //sd卡可用
   //2、獲取sd卡路徑
   File sdFile=Environment.getExternalStorageDirectory();
   File path=new File(sdFile,"a.txt");//sd卡下面的a.txt文件 參數 前面 是目錄 后面是文件
   try {
    FileOutputStream fileOutputStream=new FileOutputStream(path);
    fileOutputStream.write("hello".getBytes());
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
 }
 //讀數據
 public String readToSdCard(){
  StringBuilder stringBuilder = null;
  if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
   File sdFile=Environment.getExternalStorageDirectory();
   File path=new File(sdFile,"a.txt");
   stringBuilder =new StringBuilder();
   try {
    FileInputStream fileInputStream=new FileInputStream(path);
    BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(fileInputStream));

    String str;
    while ((str=bufferedReader.readLine())!=null){
     stringBuilder.append(str);
    }
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return stringBuilder.toString();
 }
 //判斷授權的方法 授權成功直接調用寫入方法 這是監聽的回調
 //參數 上下文 授權結果的數組 申請授權的數組
 @Override
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  if(requestCode==REQUEST_WRITE&&grantResults[0]== PackageManager.PERMISSION_GRANTED){
   writeToSdCard();
  }

 }
}

其實就是判斷是不是6.0的手機再進行申請權限的處理 利用申請權限的回調機制直接在權限申請下來之后調用寫入處理

注釋很清楚 你們看看代碼就好了( ⊙ o ⊙ )!

另外需要注意的一點我們也處理了第一次用戶拒絕權限,第二次需要請求時,給用戶提示權限作用

//第一請求權限被取消顯示的判斷,一般可以不寫
if (ActivityCompat.shouldShowRequestPermissionRationale(SdkActivity.this,
  Manifest.permission.WRITE_EXTERNAL_STORAGE)){
 Log.i("readTosdCard","我們需要這個權限給你提供存儲服務");
 showAlert();
}else {
 //2、申請權限: 參數二:權限的數組;參數三:請求碼
 ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_WRITE);
}

讀到這里,這篇“android6.0中如何寫入SD卡權限”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

察哈| 托克托县| 齐齐哈尔市| 塘沽区| 巴东县| 吴堡县| 西乌| 余江县| 滨海县| 全椒县| 两当县| 科技| 永定县| 山西省| 泸溪县| 呼伦贝尔市| 博野县| 枣阳市| 卢龙县| 荥阳市| 克山县| 柘城县| 宜州市| 米林县| 崇信县| 甘德县| 江城| 奎屯市| 元朗区| 大宁县| 象山县| 望都县| 玛沁县| 梧州市| 新田县| 湖南省| 河间市| 邻水| 凌海市| 洛扎县| 九台市|