API 22相机通过意向问题

问题描述:

我目前正在开发Android应用程序与分SDK是19,并试图以支持一路攀升至26这周我已经添加了摄像头功能,活动和我”我觉得调试这个很荒唐。API 22相机通过意向问题

基本上,用户点击相机图标,它通过一个意图开始Android相机,用户拍摄照片,它被保存,然后添加到他们启动相机的意图之前所查看的滑块画廊。

所以,我终于得到它的API 19,21,23,24,25和26的工作......这是给我一个问题,唯一的API为22,我真的想不通这是为什么。当我点击相机图标时,它会启动意图,相机加载到白色屏幕,并且应用程序崩溃。踢球者是这样的,我只是试了一下,它的工作,这两次,现在应用程序成功地拍了照片,保存它,并没有崩溃。

它的工作后,我又尝试过了,我得到这个:

09-09 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 09-09 17:19:22.381 6163-6163/com.android.camera E/AndroidRuntime:致命>例外:主 工艺:> com.android.camera,PID:6163

的java .lang.RuntimeException:媒体服务器死亡。 (Camera.java:1148) at> android.os.Handler.dispatchMessage(Handler .java:102) at> android.os.Looper.loop(Looper.java:135) at> android.app.ActivityThread.main(ActivityThread.java:5254) at> java.lang.reflect.Method。 invoke(Native Method) 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)

,并试图有点后,我接到再次,不同的错误以后。

09-09 17:32:22.185 1530年至1611年/ system_process E/AudioService:媒体服务器死亡。 09-09 17:32:22.191 4072-4072/com.android.camera E/AndroidRuntime:致命>例外:主 工艺:> com.android.camera,PID:4072

java.lang中。 RuntimeException:getParameters失败(空参数) at> android.hardware.Camera.native_getParameters(Native Method) at> android.hardware.Camera.getParameters(Camera.java:1888) at> com.android.camera.Camera。 initializeZoom(Camera.java:489) 在> com.android.camera.Camera.initializeFirstTime(Camera.java:392) 在> com.android.camera.Camera.access $ 600 (Camera.java:87) 在> com.android.camera.Camera $ MainHandler.handleMessage(Camera.java:290) 在> android.os.Handler。dispatchMessage(Handler.java:102) at> android.os.Looper.loop(Looper.java:135) at> android.app.ActivityThread.main(ActivityThread.java:5254) at> java.lang.reflect .Method.invoke(Native Method) 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); 
} 

的对结果的活动只是增加了最后拍摄的照片的画廊,而不是甚至达到了所以我不会理会它包括。

而且继承人我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()误差是与相机有关的类,但我甚至不使用它,所以我不知道为什么它甚至触发错误。所有和任何输入是受欢迎的,非常感谢。

+0

这不是一个API相关的问题,这是你打电话到崩溃的摄像头应用程序。你在API 22模拟器上试试这个吗? – ianhanniballake

+0

如果你有一个真实的设备工作,它可能仅仅是一个特定于设备的问题。我遇到了不少设备,这些设备都有奇怪的相机问题。此外,它也可能是该设备上的默认相机应用程序的问题。所有者可以设置任何支持相机意图处理它们的应用程序,而不是系统相机应用程序。甚至系统相机应用程序可能是在一个抛光不足的设备上的越野车。 –

+0

@ianhanniballake是,API 22模拟器,不同的手机。您是否试图说他们是模拟器上提供的默认相机应用程序的问题?因为这会很有意义。 – Philtron

好吧,我做了一些进一步的测试,我想我在哪里,我要责怪这个仿真器/ Android的工作室点。我跑了3场firebase robo测试,全部在api 22和不同的手机型号上。

其中每一个不断打开和关闭相机的活动就好了,不幸的是测试从来没有真正拍过照片,但是在这之前发生了故障。

如果我有机会测试了这一点,我有22 API在物理设备上的自我,它的作品,我肯定知道它的仿真器/ Android的问题。在这一点上,我甚至不觉得值得投入时间去尝试和调试,特别是在机器人测试之后。希望有人认为这有用,并节省一些时间后追逐一些变异的幽灵错误,哈哈。

编辑: 想添加为最后的笔记..我下载了api 22 x86,安装它,并做了一个新的模拟器。没有更多的问题。我使用的是api 22 x86_64,出于某种原因,它只是不喜欢在该版本上工作。给那些评论的人欢呼,你们很棒。