Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
服务未启动-在活动/片段中执行更改后Android 4.3/Xperia z1_Android_Service_Camera_Fragment - Fatal编程技术网

服务未启动-在活动/片段中执行更改后Android 4.3/Xperia z1

服务未启动-在活动/片段中执行更改后Android 4.3/Xperia z1,android,service,camera,fragment,Android,Service,Camera,Fragment,真奇怪:以下行为: 我有一个摄像头应用程序和一个处理图像数据的服务。 如果“活动/片段”启动,则“纵向”模式处于活动状态,并且一切正常 如果用户现在更改了摄像头(UI中的按钮),将执行完全相同的代码,但服务不会启动 代码如下: Intent saveImageIntent = new Intent(getActivity(), SaveImageService.class); getActivity().startService(saveImageIntent); 舱单中的服务: <se

真奇怪:以下行为:

我有一个摄像头应用程序和一个处理图像数据的服务。 如果“活动/片段”启动,则“纵向”模式处于活动状态,并且一切正常

如果用户现在更改了摄像头(UI中的按钮),将执行完全相同的代码,但服务不会启动

代码如下:

Intent saveImageIntent = new Intent(getActivity(), SaveImageService.class);
getActivity().startService(saveImageIntent);
舱单中的服务:

<service android:name="packageName.SaveImageService" />
在使用asynctasc之前,我几乎尝试了所有的方法,并且一切都很好,但我决定创建一个代码更“干净”的服务

现在这个问题真的很奇怪。 正如我前面提到的:

起初,一切都很完美,在更换相机(活动、片段未重新启动)后,几乎什么也没做。使用断点进行调试,执行代码,拍摄图像,但startService。。。代码被执行, 但最后:HandleContent服务未触发

顺便说一句,在emulator上,这似乎一直运行良好

安卓4.3-XPeria Z1出现问题
安卓4.4.2出现问题-三星S4


一些新信息:

Intent serviceIntent = new Intent(getActivity().getApplicationContext(), SaveImageService.class);

Bundle bundle = new Bundle();
bundle.putByteArray(Constants.EXTRA_IMAGE_DATA, imgData);
bundle.putInt(Constants.EXTRA_IMAGE_ROTATION_DEGREES, catchedDeviceOrientation);
bundle.putBoolean(Constants.STORE_IMAGE_USING_FFV, frontFacingCamera);
serviceIntent.putExtra(Constants.EXTRA_IMAGE_BUNDLE, bundle);

getActivity().getApplicationContext().startService(serviceIntent);
没有捆绑包的服务意图总是在启动…原因可能是什么?可能的解决方案:无。 可能的原因

Intent中的数据有一些大小限制, 问题似乎是,“普通”后置摄像头采集的图像比FFC大得多(目前为止清晰),而这数据太大,无法通过INTERNAT传递。

基本上,它没有意义,它只是不执行onHandleIntent(…)…
但如果这就是原因的话

如果不将图像数据作为字节[]传递到目的地,服务将始终执行
正确。
一直如此。

希望这些信息能帮助别人。 祝你好运,

Mike

的确很奇怪,您的代码似乎很好。你能尝试使用服务而不是意图服务吗?谢谢@ZealDeveloper,已经这样尝试过了,一点也没有改变:(案例(1)和案例(2)之间唯一发生的事情是将摄像头成员设置为null,切换摄像头,然后重新启动预览;)没有其他改变,我真的不知道。同时,刚刚用asynctask取代了完整的服务(或多或少地将OnHandleContent重命名为doInBackground),一切都按预期进行(
Intent serviceIntent = new Intent(getActivity().getApplicationContext(), SaveImageService.class);

Bundle bundle = new Bundle();
bundle.putByteArray(Constants.EXTRA_IMAGE_DATA, imgData);
bundle.putInt(Constants.EXTRA_IMAGE_ROTATION_DEGREES, catchedDeviceOrientation);
bundle.putBoolean(Constants.STORE_IMAGE_USING_FFV, frontFacingCamera);
serviceIntent.putExtra(Constants.EXTRA_IMAGE_BUNDLE, bundle);

getActivity().getApplicationContext().startService(serviceIntent);