6.0的手機對于寫入手機需要申請權限的
我做了如下處理
下面我貼出代碼
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);}
以上這篇android 6.0 寫入SD卡的權限申請實例講解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。
新聞熱點
疑難解答