使用FileProvider解决file:// URI引起的FileUriExposedException
问题
以下是一段简单的代码,它调用系统的相机app来拍摄照片:
void takePhoto(String cameraPhotoPath) {
File cameraPhoto = new File(cameraPhotoPath);
Intent takePhotoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
takePhotoIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(cameraPhoto));
startActivityForResult(takePhotoIntent, REQUEST_TAKE_PHOTO);
}
在一般情况下,运行没有任何问题;可是当把targetSdkVersion指定成24及之上并且在API>=24的设备上运行时,会抛出异常:
android.os.FileUriExposedException: file:///storage/emulated/0/DCIM/IMG_20170125_144112.jpg exposed beyond app through ClipData.Item.getUri()
at android.os.StrictMode.onFileUriExposed(StrictMode.java:1799)
at android.net.Uri.checkFileUriExposed(Uri.java:2346)
at android.content.ClipData.prepareToLeaveProcess(ClipData.java:832)
at android.content.Intent.prepareToLeaveProcess(Intent.java:8909)
...
Android实现波浪效果 - WaveView
效果图
先上效果图
实现
WaveView的属性
- Wate Level(水位)
- 波浪静止时水面距离底部的高度
- Amplitude(振幅)
- 波浪垂直振动时偏离水面的最大距离
- Wave Length(波长)
- 一个完整的波浪的水平长度
- Wave Shift(偏移)
- 波浪相对于初始位置的水平偏移