Android Camera呼叫攝像機 預覽
阿新 • • 發佈:2018-11-29
效果圖:
package com.findai.xkk.ai_interviewer; import android.Manifest; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.Configuration; import android.hardware.Camera; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.AttributeSet; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.widget.TextView; import java.io.IOException; public class MainActivity extends AppCompatActivity { // Used to load the 'native-lib' library on application startup. static { System.loadLibrary("native-lib"); } private Camera camera; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Example of a call to a native method TextView tv = (TextView) findViewById(R.id.sample_text); SurfaceView sv_camera = findViewById(R.id.sv_camera); tv.setText(stringFromJNI()); // Camera.open(); sv_camera.getHolder().addCallback(new SurfaceCallback()); if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { Log.i("TEST","Granted"); //init(barcodeScannerView, getIntent(), null); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 1);//1 can be another integer } } /** * A native method that is implemented by the 'native-lib' native library, * which is packaged with this application. */ public native String stringFromJNI(); private class SurfaceCallback implements SurfaceHolder.Callback{ @Override public void surfaceCreated(SurfaceHolder holder) { camera = Camera.open(1); try { followScreenOrientation(getBaseContext(),camera); camera.startFaceDetection(); final Camera.Parameters params = camera.getParameters(); params.setFocusMode(Camera.Parameters.FOCUS_MODE_AUTO); params.setSceneMode(Camera.Parameters.SCENE_MODE_BARCODE); camera.setPreviewDisplay(holder); camera.startPreview(); Log.i("camera","create"); }catch (Exception ex){ ex.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { Log.i("camera","change"); } @Override public void surfaceDestroyed(SurfaceHolder holder) { camera.stopPreview(); camera.setPreviewCallback(null ); camera.release(); } } public static void followScreenOrientation(Context context, Camera camera){ final int orientation = context.getResources().getConfiguration().orientation; if(orientation == Configuration.ORIENTATION_LANDSCAPE) { camera.setDisplayOrientation(180); }else if(orientation == Configuration.ORIENTATION_PORTRAIT) { camera.setDisplayOrientation(90); } } }
佈局檔案:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <SurfaceView android:id="@+id/sv_camera" android:layout_width="match_parent" android:layout_height="300dp" /> <TextView android:id="@+id/sample_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> </LinearLayout> </ScrollView> </LinearLayout>
AndroidManifest檔案:
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.findai.xkk.ai_interviewer"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> </manifest>