1

Я хочу создать приложение, которое позволяет мне управлять вспышкой на камере, однако мои исследования о том, как это сделать, привели к куче примеров, которые используют недавно обесцененные android.hardware.camera апи. Может ли кто-нибудь указать мне в правильном направлении, как я буду использовать androird.hardware.camera2, чтобы сделать простую флеш-карту?Доступ к камере с помощью android.hardware.camera2

+2

это? http://stackoverflow.com/questions/27420594/android-5-camera2-use-only-flash используйте поиск, прежде чем спрашивать –

ответ

2

Вы должны изменить свой вопрос если вы просто хотите создать простой фонарик. Использование камеры с новым android.hardware.camera2 является более сложным.

Я попытался сделать приложение предварительного просмотра камеры, используя студию android and nexus lg 5x, но не удалось.

Вместо если вы просто хотите, чтобы включить свет вспышки вот коды:

void torch(){ 
    /* turn on the flash light */ 
    CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE); 
    try { 
     String[] cameraID = new String[]{}; 
     cameraID = cameraManager.getCameraIdList(); 
     for(int i = 0; i<cameraID.length; i++){ 
      Log.e(TAG,cameraID[i]); 
     } 

     /* camera id is 0 and 1. 0 is the back camera, 1 is the front camera */ 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      cameraManager.setTorchMode(cameraID[0],true); 
      //true means turned on, false, means turned off. 
     } 

    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 

} 

Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example.test"> 
<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

<uses-feature android:name="android.hardware.camera" /> 
<uses-feature android:name="android.hardware.camera.autofocus" /> 
<uses-feature android:name="android.hardware.camera2.full" /> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/MaterialTheme"> 

    <activity 
     android:name=".MainActivity" 
     android:screenOrientation="portrait" 
     android:label="@string/app_name"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 


</application> 

MainActivity.java:

package com.example.test; 

import android.app.Activity; 
import android.graphics.Camera; 
import android.hardware.camera2.params.InputConfiguration; 
import android.os.Build; 
import android.os.Bundle; 

public class MainActivity extends Activity { 

private final static String TAG = "Camera2testJ"; 
private Size mPreviewSize; 

private TextureView mTextureView; 
private CameraDevice mCameraDevice; 
private CaptureRequest.Builder mPreviewBuilder; 
private CameraCaptureSession mPreviewSession; 

private Button mBtnShot; 

private static final SparseIntArray ORIENTATIONS = new SparseIntArray(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setContentView(R.layout.activity_main); 

    mTextureView = (TextureView)findViewById(R.id.texture); 
    mTextureView.setSurfaceTextureListener(mSurfaceTextureListener); 

    mBtnShot = (Button)findViewById(R.id.btn_takepicture); 
    mBtnShot.setOnClickListener(new OnClickListener(){ 

     @Override 
     public void onClick(View v) { 
      Log.e(TAG, "mBtnShot clicked"); 
      torch(); 
     } 

    }); 

} 

void torch(){ 
    /* try the flash light */ 
    CameraManager cameraManager = (CameraManager) getSystemService(Context.CAMERA_SERVICE);; 
    try { 
     String[] cameraID = new String[]{}; 
     cameraID = cameraManager.getCameraIdList(); 
     for(int i = 0; i<cameraID.length; i++){ 
      Log.e(TAG,cameraID[i]); 
     } 

     /* camera id is 0 and 1. which one is the front or the back camera? */ 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
      cameraManager.setTorchMode(cameraID[0],true); 
     } 

    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 

} 

Лайу t activity_main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextureView 
     android:id="@+id/texture" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentTop="true" /> 

    <Button 
     android:id="@+id/btn_takepicture" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:text="@string/picture" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 
+0

Если вы хотите использовать этот ответ, просто не включайте функцию материал. Это разрешение просто не существует, и ваше приложение больше не доступно для какого-либо устройства. –

1

Вы должны изучить образец https://github.com/googlesamples/android-Camera2Basic. Там показан способ управления вспышкой с

mPreviewRequestBuilder.set(CaptureRequest.CONTROL_AE_MODE, 
            CaptureRequest.CONTROL_AE_MODE_ON_AUTO_FLASH); 

Я учусь способ получить все кадры, показанные в окне предварительного просмотра текстуры, чтобы сделать некоторую обработку изображения, если вы найдете способ, пожалуйста, дайте мне знать = D ,