android 6.0 写入SD卡的权限申请实例讲解
作者:Vincent__Lee 发布时间:2023-07-27 03:12:37
标签:android,6.0,SD,权限
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);
}
来源:https://blog.csdn.net/li15225271052/article/details/54657860
0
投稿
猜你喜欢
- 这几天自己研究了关于地手机上面开发安卓地图的问题,发现百度官方示例demo讲解百度持续定位方面还是讲解的有些不清楚,本人研究了几次之后将其弄
- 本Demo为练手小项目,主要是熟悉目前主流APP的架构模式.此项目中采用MVC设计模式,纯代码和少许XIB方式实现.主要实现了朋友圈功能和摇
- 一、什么是iText?在企业的信息系统中,报表处理一直占比较重要的作用,iText是一种生成PDF报表的Java组件。通过在服务器端使用Js
- 最近在看《.NET游戏编程入门经典 C#篇》 第一章介绍了如何制作俄罗斯方块,自己试了试按照书上的步骤,可算是完成了。于是写下这篇文章留作纪
- JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展
- C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数。需要说明的是,iostream头文件
- activity A和BA 获取数据的activity B返回数据的activity点击A上的按钮,在A的textview上显示
- 构造方法以及参数:PageView可用于Widget的整屏滑动切换,如当代常用的短视频APP中的上下滑动切换的功能,也可用于横向页面的切换,
- tcp客户端示例#include <errno.h> #include <sys/socket.h> #includ
- Android 自动获取验证码的两种方式分别是BroadcastReceiver及ContentObserver,两种方式都需要进行注册、取
- 今天来了一个问题:软键盘无法弹出。分析后是因为系统判断当前有外接硬键盘,就会隐藏软键盘。但实际情况并不是这么简单,该问题只有在特定条件下偶现
- 本文实例为大家分享了android TextView跑马灯效果的具体代码,供大家参考,具体内容如下一、要点设置四个属性android:sin
- 前言 因为自己在做的一个小软件里面需要用到从A-Z排序的ListView,所以自然而然的想到了微信的联系人,我想要的就是那样的效果。本来没
- 背景最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上
- Java实现PC微信扫码支付做一个电商网站支付功能必不可少,那我们今天就来盘一盘微信支付。微信支付官方网站业务流程:开发指引文档支付服务开发
- 本文实例为大家分享了C#超市收银系统设计的具体代码,供大家参考,具体内容如下1.登录界面代码如下:using System;using Sy
- 本文实例为大家分享了Android绝对布局AbsoluteLayout的具体代码,供大家参考,具体内容如下1>AbsoluteLayo
- 综述在Android系统中,出于对性能优化的考虑,对于Android的UI操作并不是线程安全的。也就是说若是有多个线程来操作UI组件,就会有
- 一、导入和导出导入:通过解析excel表格中的数据,然后将数据放到一个集合中,接着通过对持久层操作,将数据插入到数据库中,再加载一下页面,从
- 本文实例总结了Android开发中Toast显示消息的方法。分享给大家供大家参考,具体如下:Android中提供一种简单的Toast消息提示