Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中通过我的应用程序访问我的相机_Java_Android_Xml_Android Studio_Camera - Fatal编程技术网

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);

}