【问题标题】:Camera intent crashing my application after few pictures几张照片后,相机意图使我的应用程序崩溃
【发布时间】:2014-05-22 16:14:21
【问题描述】:

我在从 android.provider.MediaStore.ACTION_IMAGE_CAPTURE 回来时遇到了一些手机问题。在 HTC 和 Alcatel 上它运行良好,但在 LG 上它使我的应用程序崩溃。我可以保存一些图片,然后我的应用程序因抱歉而崩溃! MyApplication 已停止。我已经尝试了很多方法来避免这种情况,但我仍然遇到同样的错误。

首先我用的是这个

1:尝试

用图片路径拍照(没有异常):

public static void saveImage(String saveImgDir, String image, int TAKE_PHOTO_CODE, Activity activity) {
        try {
            GlobalVariables.incorrectButtonPressed = false;
             // CREATE DIR IF NOT EXISTS
             File directory = new File(saveImgDir);
             directory.mkdirs();
             // CREATE AND SAVE IMG
             File imageFile = new File(saveImgDir + File.separator + image);
             try {
             imageFile.createNewFile();
             } catch (IOException e) {
             Log.d("IMG", "FILE CREATE: " + e.toString(), e.getCause());
             }
             Uri outputFileUri = Uri.fromFile(imageFile);
             // CALL CAMERA ACTIVITY
             Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
             cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
             activity.startActivityForResult(cameraIntent, TAKE_PHOTO_CODE);
        } catch (Exception ex) {
            Log.d("CAMPROBLEM", "bblockScenario", ex);
        }

    }

关于活动结果(没有得到任何异常):

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    try {
    if (requestCode == B_TAKE_PHOTO_CODE_AFTER && resultCode == RESULT_OK) {
        Log.d("CAMPROBLEM", "ACTIVITY RESULT B_TAKE_PHOTO_CODE_AFTER RESULT OK");
        imageTakenAfter++;
        Toast.makeText(context, "PCITURE SAVED", Toast.LENGTH_LONG).
        return;
        }
        if (requestCode == B_TAKE_PHOTO_CODE_AFTER && resultCode != RESULT_OK) {
            Log.d("CAMPROBLEM", "ACTIVITY RESULT B_TAKE_PHOTO_CODE_AFTER RESULT NOT OK");
            Toast.makeText(context, "PCITURE NOT SAVED", Toast.LENGTH_LONG).show();
            return;
        }
    } catch (Exception ex) {
        Log.d("CAMPROBLEM", "bblockScenario", ex);
    }

}

2:尝试

然后我尝试使用异步任务(只是为了确保这不是内存泄漏)。我从 AsyncTask 类中调用了 saveImage 函数,但仍然遇到同样的问题。 (没有得到任何感觉)

3:尝试

在没有图片保存路径的情况下调用intent:

public static void saveImage(int TAKE_PHOTO_CODE, Activity activity) {
        try {
            GlobalVariables.incorrectButtonPressed = false;
            // CREATE DIR IF NOT EXISTS
            Intent it = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            activity.startActivityForResult(it, TAKE_PHOTO_CODE);
        } catch (Exception ex) {
            Log.d("CAMPROBLEM", "bblockScenario", ex);
        }

    }

并将我的图片保存在我的 onActivityResult 中

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        try {
            String image = ServerTime.getServerDate() + ".jpg";
            File file = new File(saveImgDirectory + File.separator + image);
            try {
                if (data == null) {
                    Toast.makeText(context, "IMAGE NOT SAVED", Toast.LENGTH_LONG).show();
                    bblockScenario();
                    Log.d("CAMPROBLEM", "NULL DATA");
                    return;
                }
                Bitmap photo = (Bitmap) data.getExtras().get("data");
                FileOutputStream out = null;

                out = new FileOutputStream(file);
                photo.compress(Bitmap.CompressFormat.PNG, 90, out);
                if (out != null) {
                    out.close();
                }
            } catch (Exception e) {
                Toast.makeText(context, "IMAGE NOT SAVED", Toast.LENGTH_LONG).show();
                bblockScenario();
                Log.d("CAMPROBLEM", "E", e);
                return;
            } finally {
                try {

                } catch (Throwable ignore) {
                }
            }
            Toast.makeText(context, "IMAGE SAVED", Toast.LENGTH_LONG).show();
            return;
        } catch (Exception ex) {
            Log.d("CAMPROBLEM", "bblockScenario", ex);
        }

    }

在 onActivityResult 中,我每 3 张图片获得一次空数据。不知道为什么。

我的清单中有所有前提:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" android:required="false"/>

任何有关此问题的帮助和知识都会使我的生活更轻松。希望有人可以帮助我。

提前致谢

编辑:

Logcat:

05-23 10:26:17.412: E/AndroidRuntime(14022): FATAL EXCEPTION: main
05-23 10:26:17.412: E/AndroidRuntime(14022): java.lang.IllegalArgumentException: View not attached to window manager
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.view.WindowManagerImpl.findViewLocked(WindowManagerImpl.java:671)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.view.WindowManagerImpl.removeView(WindowManagerImpl.java:364)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.view.WindowManagerImpl$CompatModeWrapper.removeView(WindowManagerImpl.java:163)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.app.Dialog.dismissDialog(Dialog.java:347)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.app.Dialog.dismiss(Dialog.java:330)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at es.zonsko.bitola.blocator.activity.BlocatorTabHostActivity$SyncTask.onPostExecute(BlocatorTabHostActivity.java:381)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at es.zonsko.bitola.blocator.activity.BlocatorTabHostActivity$SyncTask.onPostExecute(BlocatorTabHostActivity.java:1)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.os.AsyncTask.finish(AsyncTask.java:631)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.os.AsyncTask.access$600(AsyncTask.java:177)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.os.Looper.loop(Looper.java:153)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at android.app.ActivityThread.main(ActivityThread.java:5070)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at java.lang.reflect.Method.invokeNative(Native Method)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at java.lang.reflect.Method.invoke(Method.java:511)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
05-23 10:26:17.412: E/AndroidRuntime(14022):    at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 应用程序在我的工作电脑上,明天我用 logcat 编辑这篇文章。
  • @interlude 帖子已编辑并包含 logcat

标签: java android android-intent camera crash


【解决方案1】:

您可以在 onActivityResult 中处理此异常,请在 onActivityResult() 开始时使用以下代码

if(resultcode != RESULT_OK)
return;

【讨论】:

  • 如果您正在写我的第三个解决方案,是的,我可以。我还可以让用户在保存之前拍摄每张照片 2、3 次,但这不是我想要的。
  • 这甚至没有试图回答这个问题。它应该是一个评论,而不是一个很好的评论。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多