Java 如何在Android中通过我的应用程序访问我的相机
我正在创建一个应用程序。在这个应用程序中,我想打开相机并保存它 所以我写了代码来实现这一点Java 如何在Android中通过我的应用程序访问我的相机,java,android,xml,android-studio,camera,Java,Android,Xml,Android Studio,Camera,我正在创建一个应用程序。在这个应用程序中,我想打开相机并保存它 所以我写了代码来实现这一点 takepic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { count++; String file = dir+count+".jpg"; File newfile
takepic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
count++;
String file = dir+count+".jpg";
File newfile = new File(file);
try {
newfile.createNewFile();
}
catch (IOException e)
{
}
Uri outputFileUri = Uri.fromFile(newfile);
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(cameraIntent, TAKE_PHOTO_CODE);
}
});
我还向清单文件添加了权限
<?xml version="1.0" encoding="utf-8"?>
既然我已经添加了权限,为什么我会得到这个
这是我在日志中的错误
04-05 14:03:56.839 9562-9562/com.example.pavithraprabodha.selfimania E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.pavithraprabodha.selfimania, PID: 9562
java.lang.SecurityException: Permission Denial: starting Intent { act=android.media.action.IMAGE_CAPTURE flg=0x3 cmp=com.android.camera/.Camera clip={text/uri-list U:file:///storage/emulated/0/Pictures/Selfimania/1.jpg} (has extras) } from ProcessRecord{420a1c9 9562:com.example.pavithraprabodha.selfimania/u0a58} (pid=9562, uid=10058) with revoked permission android.permission.CAMERA
at android.os.Parcel.readException(Parcel.java:1599)
at android.os.Parcel.readException(Parcel.java:1552)
at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:2658)
at android.app.Instrumentation.execStartActivity(Instrumentation.java:1507)
at android.app.Activity.startActivityForResult(Activity.java:3917)
at android.support.v4.app.ActivityCompatJB.startActivityForResult(ActivityCompatJB.java:30)
at android.support.v4.app.ActivityCompat.startActivityForResult(ActivityCompat.java:162)
at android.support.v4.app.FragmentActivity.startActivityFromFragment(FragmentActivity.java:925)
at android.support.v4.app.FragmentActivity$HostCallbacks.onStartActivityFromFragment(FragmentActivity.java:1008)
at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:940)
at android.support.v4.app.Fragment.startActivityForResult(Fragment.java:929)
at com.example.pavithraprabodha.selfimania.Add_new_fragement$2.onClick(Add_new_fragement.java:89)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
请参考此答案
这与您的问题类似,请参考此答案
这与您的问题类似,如果您的CompileSDK版本低于23,则只需在清单中定义以下权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
代替takeVideo,你可以用任何方法打开相机,我已经用过了
public void takeVideo(){
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);
// set video quality
// 1- for high quality video
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
// start the video capture Intent
getParentFragment().startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE);
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(fileUri.getPath());
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
sendBroadcast(mediaScanIntent);
}
要将视频保存到gallery,您必须使用sendBroadcast(mediaScanIntent)的新意图,如上所示
如果您正在feagment中编写所有这些代码,请不要忘记使用上下文将sendBroadcast(mediaScanIntent)作为getActivity()调用。sendBroadcast(mediaScanIntent)
选中此项:如果您的CompileSDK版本低于23,则只需在清单中定义以下权限:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
代替takeVideo,你可以用任何方法打开相机,我已经用过了
public void takeVideo(){
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);
// set video quality
// 1- for high quality video
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
// start the video capture Intent
getParentFragment().startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE);
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(fileUri.getPath());
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
sendBroadcast(mediaScanIntent);
}
要将视频保存到gallery,您必须使用sendBroadcast(mediaScanIntent)的新意图,如上所示
如果您正在feagment中编写所有这些代码,请不要忘记使用上下文将sendBroadcast(mediaScanIntent)作为getActivity()调用。sendBroadcast(mediaScanIntent)
检查此项:实际上权限正在被撤销
撤销权限android.permission.CAMERA
查看日志实际上权限正在被撤销撤销权限android.permission.CAMERA
查看日志
public void takeVideo(){
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO);
// set video quality
// 1- for high quality video
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
// start the video capture Intent
getParentFragment().startActivityForResult(intent, CAMERA_CAPTURE_VIDEO_REQUEST_CODE);
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
File f = new File(fileUri.getPath());
Uri contentUri = Uri.fromFile(f);
mediaScanIntent.setData(contentUri);
sendBroadcast(mediaScanIntent);
}