現在、min sdkが19のアンドロイドアプリを開発していて、26歳までサポートしています。今週はアクティビティにカメラ機能を追加しました。これをデバッグするのはばかげて挑戦的なことです。API 22カメラ別インテントの問題
基本的に、ユーザーはカメラアイコンをクリックし、意図を介してアンドロイドカメラを起動し、ユーザーが写真を撮って保存し、カメラの意図を開始する前に見ていたスライダーギャラリーに追加します。
最終的にAPI 19,21,23,24,25、および26で作業していました...問題を引き起こしている唯一のAPIは22であり、なぜその理由が分かりません。カメラのアイコンをクリックすると、インテントが起動し、カメラが白い画面に読み込まれ、アプリがクラッシュします。キッカーはこれです、私はちょうどそれを試したと働いた、アプリは正常に写真を撮って、それを保存し、クラッシュしていないことを2回thats。それが働いた後
は、私は再びそれを試してみましたが、私はこれだ:
9月9日17:19:22.381 6163から6163/com.android.cameraのE /カメラ:エラー100 09から09を17:19:22.381 6163-6163/com.android.camera E/CameraErrorCallback:Got>カメラエラーコールバック。誤差= 100 9月9日17:19:22.381 6163から6163/com.android.camera E/AndroidRuntime:FATAL> EXCEPTION:メイン プロセス:> com.android.camera、PID:6163
ジャワ.lang.RuntimeException:メディアサーバーが停止しました。 at> com.android.camera.CameraErrorCallback.onError(CameraErrorCallback.java:31) at> android.hardware.Camera $ EventHandler.handleMessage(Camera.java:1148) at> android.os.Handler.dispatchMessage(Handler .java:102) に> android.os.Looper.loop(Looper.java:135) に> android.app.ActivityThread.main(ActivityThread.java:5254) に> java.lang.reflect.Method。 invoke(ネイティブメソッド) at> java.lang.reflect.Method.invoke(Method.java:372) at> com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) at> com.android.internal.os.ZygoteInit.main(Zy goteInit.java:698)
そして、それを試した後少し後、私は、まだ再び別のエラーを得た。..
9月9日17:32:22.185 1530年から1611年/ system_processをE/AudioService:メディアサーバーが停止しました。 9月9日17:32:22.191 4072から4072/com.android.camera E/AndroidRuntime:FATAL> EXCEPTION:メイン プロセス:> com.android.camera、PID:4072
れるjava.lang。 RuntimeException:getParametersが失敗しました(空のパラメータ)。 at> android.hardware.Camera.native_getParameters(ネイティブメソッド) at> android.hardware.Camera.getParameters(Camera.java:1888) > com.android.camera.Camera initializeZoom(Camera.java:489) at> com.android.camera.Camera.initializeFirstTime(Camera.java:392) > com.android.camera.Camera.access $ 600 (Camera.java:87) at> com.android.camera.Camera $ MainHandler.handleMessage(Camera.java:290) > android.os.Handler。>れるjava.lang.reflectで> android.app.ActivityThread.main(ActivityThread.java:5254) で> android.os.Looper.loop(Looper.java:135) でDispatchMessageを(Handler.java:102) .Method.invoke(ネイティブメソッド) at java.lang.reflect.Method.invoke(Method.java:372) at> com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903)ここでcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
>で は私のコードは、カメラ機能/ ACTIを呼び出すを中心ですVITY:
は、カメラアイコンのonclickリスナーの設定:結果のための活動に
public boolean onCreateOptionsMenu(Menu menu) {
item.getActionView().setOnClickListener(new View.OnClickListener() >
@Override
public void onClick(View v) {
startActivityForResult(CameraUtility.dispatchTakePictureIntent(getApplicationContext(), mushroomFolder), 1);
return;
}
});
return super.onCreateOptionsMenu(menu);
}
ちょうどギャラリーへの最後の撮影した写真を追加し、たとえそうであっても、私はそれを含めわざわざ習慣に達していません。
そしてHERESに私のCameraUtilityのためのコード:
class CameraUtility extends AppCompatActivity {
private static String CURRENT_PHOTO_PATH;
public static String PHOTO_DIRECTORY;
public static void setPhotoDirectory(Context c) {
PHOTO_DIRECTORY = c.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/MyTrackerPhotos/";
}
public static Intent dispatchTakePictureIntent(Context c, String name) {
String timeStamp = new SimpleDateFormat("dd-MM-yyyy_HHmmss").format(new Date());
String path = c.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/MyTrackerPhotos/" + name + "/" + name + timeStamp + ".jpg";
File file = new File(path);
Uri outputFileUri;
if (Build.VERSION.SDK_INT >= 23)
outputFileUri=FileProvider.getUriForFile(c,
"com.tracker.mushroom.fileprovider", file);
else
outputFileUri = Uri.fromFile(file);
CURRENT_PHOTO_PATH = file.getPath();
Intent intent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
return intent;
}
public static String getCurrentPhotoPath() {
return CURRENT_PHOTO_PATH;
}
public static File[] getImageFiles(Context c, String mushroomFolder) throws IOException {
String filePath = c.getExternalFilesDir(Environment.DIRECTORY_PICTURES) + "/MyTrackerPhotos/" + mushroomFolder;
File file = new File(filePath);
file.mkdirs();
file.setReadable(true);
file.setWritable(true);
return file.listFiles();
}
}
だから私は私のコードのその発行した場合、またはそのエミュレータの場合や、他の何かが私もわからない場合は本当にわからないんだけどなぜなら、他のすべてのAPIが動作していれば、私は助けられることはありませんが、私の頭を傷つけてしまうからです。私はgetParameters()エラーがカメラクラスに関連していることを知っていますが、私はそれを使用していないので、なぜそのエラーを引き起こすのか分かりません。すべての入力はすべて歓迎され、非常に感謝しています。
これはAPI関連の問題ではなく、クラッシュするよう呼びかけるのはカメラアプリです。あなたはAPI 22エミュレータでこれを試していますか? – ianhanniballake
実際のデバイスで作業する場合、単にデバイス固有の問題である可能性があります。私は奇妙なカメラの問題を抱えていたかなりのデバイスに遭遇しました。さらに、そのデバイスのデフォルトのカメラアプリにも問題がある可能性があります。所有者は、システムカメラアプリの代わりに、カメラインテントがそれらを処理するためのサポートを明示する任意のアプリを設定することができます。さらに、システムカメラアプリでさえ、あまり研磨されていないデバイスではバグがあるかもしれません。 –
@ianhanniballakeはい、api 22エミュレータ、別の携帯電話。エミュレータで提供されているデフォルトのカメラアプリに問題があるとお考えですか?それは多くの意味があるからです。 – Philtron