首先在AndroidManifest中静态申请权限:
<!-- SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<!--读取SDCard数据权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<!-- 向SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
然后在Activity中动态申请权限:
public class MainActivity extends AppCompatActivity{
private static String[] PERMISSIONS_STORAGE = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
verifyStoragePermissions(this);
}
public static void verifyStoragePermissions(Activity activity) {
try {
//检测是否有写的权限
int permission = ActivityCompat.checkSelfPermission(activity,
"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 没有写的权限,去申请写的权限,会弹出对话框
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE, 1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
最后将Bitmap图片写入本地 和 从本地读取图片:
public class ImageSaveUtils {
public static final String PATH = "/sdcard/kang/pic/"; // 存储路径
public static final String PICTURE_NAME = "kang_image"; // 图片名
public static final String FULL_PATH = PATH + PICTURE_NAME + ".jpg"; // 全路径
public static void saveBitmap(Bitmap bitmap) {
File filePic;
if (!Environment.getExternalStorageState()
.equals(Environment.MEDIA_MOUNTED)) {
return;
}
try {
filePic = new File(FULL_PATH);
if (!filePic.exists()) {
filePic.getParentFile().mkdirs();
filePic.createNewFile();
}
FileOutputStream fos = new FileOutputStream(filePic);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static Bitmap getBitmap() {
try {
File file = new File(FULL_PATH);
FileInputStream inputStream = new FileInputStream(file);
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
return bitmap;
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
}
}