現在、懐中電灯のオン/オフに取り組んでいます。このエラーが発生していますJava.lang.RuntimeException: Fail to connect to camera service
このエラーが発生した理由がわかりません。多くの解決策を紹介しましたが、私の問題はまだ解決していません。懐中電灯が点灯しているときはエラーは発生しませんが、懐中電灯が消灯しているときはエラーが発生します。
マイコード メインコード 。
私のマニフェストの許可:
<uses-permission Android:name="Android.permission.CAMERA" />
<uses-feature Android:name="Android.hardware.camera" />
<uses-feature Android:name="Android.hardware.camera.autofocus"/>
これを試して...
static Camera camera = null;
上に宣言します。
try{
if(clickOn == true) {
clickOn = false;
camera = Camera.open();
Parameters parameters = camera.getParameters();
parameters.setFlashMode(Parameters.FLASH_MODE_TORCH);
camera.setParameters(parameters);
camera.startPreview();
remoteViews.setViewVisibility(R.id.button1, View.GONE);
remoteViews.setViewVisibility(R.id.button2, View.VISIBLE);
localAppWidgetManager.updateAppWidget(componentName, remoteViews);
} else {
clickOn = true;
camera.stopPreview();
camera.release();
camera = null;
remoteViews.setViewVisibility(R.id.button1, View.VISIBLE);
remoteViews.setViewVisibility(R.id.button2, View.GONE);
localAppWidgetManager.updateAppWidget(componentName, remoteViews);
}
} catch(Exception e) {
Log.e("Error", ""+e);
}
私はここで答えがどれも解決しないという同じ問題を抱えていたので、それを解決した後、私はそれを解決する方法を追加しています。これは、アプリごとの権限の設定をサポートする新しいAndroidバージョンに適用されます(Marshmallow、6.0以降)。カメラの許可を無効にすることができ、アプリの設定から有効にする必要があります。設定->アプリ-> [アプリ]->権限
これについての詳細はこちら: http://developer.Android.com/training/permissions/requesting.html
私もこのエラーを見ました:
Java.lang.RuntimeException:カメラサービスへの接続に失敗する
懐中電灯アプリで実験中。私は自分の権限に少しずさんで、manifest.xmlファイルのアプリケーションブロックの本文にそれらをコピーしたことがわかりました。したがって、以下に記載されている構文に従う必要があります。
http://developer.Android.com/guide/topics/manifest/manifest-element.html
そうしないと、Camera.open()呼び出しでのサービス接続障害でアプリが失敗します。質問の許可に基づいて、次のようになります。
<uses-permission Android:name="Android.permission.CAMERA" />
<uses-feature Android:name="Android.hardware.camera" />
<uses-feature Android:name="Android.hardware.camera.autofocus"/>
<application
許可と機能のリストがマニフェストセクションにのみ含まれ、アプリケーションセクションに埋もれていないことを確認してください。
この問題は、アプリのカメラ権限を有効にしていない場合、Android 6.0で発生する可能性があります。 Android 6.0からは、アプリケーションに特定のアクセス許可を付与するかどうかに関係なく、アプリのアクセス許可の天気を処理できます。
そのため、まだ有効になっていない場合は、settings->apps->your_app->enable camera permission
から許可を有効にする必要があります。
OSバージョンが6.0以降の場合、これを試してください。これが役立つことを願っています。
public class RequestUserPermission {
private Activity activity;
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA
};
public RequestUserPermission(Activity activity) {
this.activity = activity;
}
public void verifyStoragePermissions() {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so Prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
}
**//CALL FROM YOUR ACTIVITY**
RequestUserPermission requestUserPermission = new RequestUserPermission(this);
requestUserPermission.verifyStoragePermissions();
存在しないcameraIDを使用してカメラを開こうとすると、同じエラーが表示されます(Java.lang.RuntimeException:Fail to Connect to camera service)
このブロックのコードを見てください
camera.setParameters(parameters);
camera.stopPreview();
camera.release();
camera = null;
release()
を呼び出して、他のアプリケーションで使用するためにカメラを解放します。アプリケーションは、onPause()
ですぐにカメラを解放する必要があります(_onResume().
でカメラを再度open()します)
リリース直後の上記のコードでは、カメラにnullを入れています
こんにちはトーチの種類のアプリやフラッシュに関連するものを扱っていることを願っています。これまでに多くの議論がありましたが、ここにあなたのニーズを達成するための有用なリンクとチュートリアルがあります。
Androidでプログラムでカメラのフラッシュライトをオンにする方法
http://www.androidhive.info/2013/04/Android-developing-flashlight-application/
http://www.compiletimeerror.com/2013/08/how-to-turn-onoff-camera-led-flashlight.html#.U4WH5Xbc3o4
http://Android.programmerguru.com/Android-flashlight-example/
この問題に対する簡単な答えは、ユーザーにカメラの許可を求めていなかったということです。そのため、デフォルトでは、マシュマロデバイスのアプリではカメラの許可を利用できませんでした。カメラを起動する前にカメラの許可チェックを追加しただけで、すべてが正常に機能します。
他のアプリケーションがカメラにアクセスできるように、カメラから戻ったら、stopPreview()
とrelease()
が必要です。 「Camera」クラスを静的にし、onPause()
でnull
として参照します。これで問題が解決します。
やってみて:
public class CameraPhotoCapture extends Activity{
static Camera mcamera = null;
@Override
protected void onPause() {
// TODO Auto-generated method stub
if (mcamera != null) {
mcamera.stopPreview();
mcamera.release();
mcamera = null;
Log.d(DEBUG_TAG, "releaseCamera -- done");
}
super.onPause();
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
if (mcamera != null) {
Camera.open();
Log.d(DEBUG_TAG, "openCamera -- done");
}
super.onResume();
}
}
アプリを終了するときに、この行を使用してみてください。
System.exit(0);
どこかからFlashlightアプリのコードを受け取りました。 System.exit(0)
を使用してアプリを閉じていました。これは良い習慣ではないことを知って、削除しました。その後、これらのエラーを受け取り始めました。受け入れられた答えの解決を試みましたが、その後、他のエラーを受け取り始めました。したがって、それらを解決する代わりに、このSystem.exit(0)
行を戻すだけです。そして、それはうまく働き始めました。 これは良い方法ではありませんが、小さな懐中電灯アプリの場合は、この簡単な解決策を試すことができます。