相机效果
1.在res文件中创建xml文件并创建paths.xml
paths.xml内容如下:
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">
<external-path
name="mypath"
path="DCIM">
</external-path>
</paths>
2.在清单里添加权限并在application下添加如下
注意需要修改provider-authorities
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application >
<provider
android:exported="false"
android:grantUriPermissions="true"
android:authorities="当前package(包名)manifest-package"
android:name="androidx.core.content.FileProvider">
<!--meta-data fileprovider操作的文件的路径 name:名字 写死 resource:xml文件定义路径-->
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/paths"></meta-data>
</provider>
</application>
3.导入依赖
implementation 'com.github.bumptech.glide:glide:4.9.0'//glide依赖
3.主页面布局
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<Button
android:id="@+id/camera"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="相机"
/>
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</LinearLayout>
4.主页面
注意需要修改相机注释下的一个当前包名
public class MainActivity extends AppCompatActivity {
//路径
final String path = "/sdcard/DCIM/aa.jpg";
private Button _camera;
private ImageView _iv;
private void assignViews() {
_camera = (Button) findViewById(R.id.camera);
_iv = (ImageView) findViewById(R.id.iv);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
assignViews();
//动态添加权限
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
requestPermissions(new String[]{
"android.permission.CAMERA",
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE"
},101);
}
//相机
_camera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
Uri uriForFile = FileProvider.getUriForFile(MainActivity.this, "当前包名", new File(path));
intent.putExtra(MediaStore.EXTRA_OUTPUT,uriForFile);
startActivityForResult(intent,101);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 101 && resultCode == Activity.RESULT_OK){
Toast.makeText(this, "拍照成功", Toast.LENGTH_SHORT).show();
Glide.with(this).load(path).into(_iv);
}
}
}