2016-04-05 1 views
0

Я создаю приложение. В этом приложении я хочу открыть свою камеру, и я хочу ее сохранить.Как получить доступ к моей камере из моего приложения в Android

Так что я написал код, чтобы сделать это

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"?> 

<uses-feature android:name="android.hardware.camera" 
    android:required="true" /> 


<uses-permission android:name="android.permission.INTERNET" /> 
<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"/> 
<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <meta-data 
     android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/app_id" /> 

    <activity android:name=".LoginActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity 
     android:name="com.facebook.FacebookActivity" 
     android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" 
     android:theme="@style/AppTheme.NoActionBar"></activity> 
</application> 

Но когда я попытаться открыть кулачок Эра Я получаю эту ошибку:

java.lang.SecurityException: Permission Denial: 

Почему я получаю это, так как я добавил разрешения

Это моя ошибка в журнале

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) 

ответ

1

Если compileSdkVersion меньше 23, ниже зефира, вам нужно только определить следующее разрешение в манифесте:

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

Если вы сохраняете изображение или видео, то определить разрешение WRITE_EXTERNAL_STORAGE также.

Теперь зефир вы должны определить разрешение динамически, что-то вроде этого:

private static final int REQUEST_CAMERARESULT=201; 

ibtn_cam.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       if(getActivity().checkSelfPermission(Manifest.permission.CAMERA)== PackageManager.PERMISSION_GRANTED){ 
        ///method to get Images 
        takeVideo(); 
       }else{ 
        if(shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)){ 
         Toast.makeText(getActivity(),"Your Permission is needed to get access the camera",Toast.LENGTH_LONG).show(); 
        } 
        requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.CAMERA}, REQUEST_CAMERARESULT); 
       } 
      }else{ 
       takeVideo(); 
      } 
     } 
    }); 

Вместо 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); 

} 

Для сохраните видео в галерее, вы должны использовать новое намерение с sendBroadcast (mediaScanIntent), как показано выше,

, если вы пишете весь этот код внутри устройства, не забыл использовать контекст для вызова sendBroadcast (mediaScanIntent) как getActivity() sendBroadcast (mediaScanIntent)

проверить это:. question

Смежные вопросы