2016-05-13 9 views
0

Ich fange gerade an, Android Studio zu studieren.Fragen zur Camera2-Klasse in Android Studio und API-Ebene zur Entwicklung von Flashlight App

Versuchen, zu üben, indem Sie benutzerdefinierte Taschenlampe Anwendung erstellen, aber habe es schwer, dies zu tun. Es gab viele verwandte Fragen hier auf S.O, die ich für perfekt hielt, um es als Beispiel zu nehmen. Aber diese Fragen wurden vor einigen Jahren gestellt und es funktioniert nicht für mich.

Mein Problem ist, dass wenn ich versuche, Camera-Objekt zu verwenden, Android Studio sagt mir, dass die Klasse veraltet ist, und dass es Kamera2 Klasse verwenden sollte.
In der Android Studio-Website heißt es, CameraManager zu verwenden, um mit der Kamera zu arbeiten. Allerdings, wenn ich es versuche, sagt es "Aufruf erfordert API-Ebene 23 (aktuelle Min ist 22) ...." Ich teste die App mit meinem Handy, das ein Galaxy S5 ist, und in der Registerkarte Optionen zu wählen das Gerät oder der Emulator. Es zeigt, dass mein Telefon Gerät auf API-Ebene 22 ist.
Nun. Ich würde dann denken, dass mein Telefon zu alt ist. Aber ich habe verschiedene FlshLight-Apps aus dem Google Play Store heruntergeladen und mein Telefon kann es problemlos ausführen. Könnte mich jemand in die richtige Richtung führen?

Hier ist mein Code.

import android.app.Activity; 
import android.content.Context; 
import android.graphics.Camera; 
import android.hardware.camera2.CameraAccessException; 
import android.hardware.camera2.CameraDevice; 
import android.hardware.camera2.CameraManager; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 


public class MainActivity extends Activity { 

Button button ; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    button = (Button)findViewById(R.id.mButton); 

} 

// When user press the button, turn the Flashlight On. 
public void buttonPressed(View view){ 
    CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE); 
    try { 
     String [] list = manager.getCameraIdList(); 
      for(int i = 0; i < list.length; i ++){ 
       manager.setTorchMode(list[i],true); 
      } 


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

} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.johnlee.myflash" > 
    <uses-permission android:name="android.permission.CAMERA"/> 
    <uses-permission android:name="android.permission.FLASHLIGHT"/> 
    <uses-sdk android:minSdkVersion="22"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name=".MainActivity" 
      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> 

</manifest> 

Antwort

0

Sie verwenden könnte eine if-Anweisung, wenn die OS-Version überprüfen unter oder über API-Ebene 23 ist, und dann die entsprechende Kamera verwenden.

if (android.os.Build.VERSION.SDK_INT >=android.os.Build.VERSION_CODES.THE_REQUIRE_VERSION) { 
     // only for a specific and newer versions 
    } 
    else{ 
     //for deprecated versions 
    }