Когда я протестировать услуги GPS в примере «DeviceDemo» от MAF я получаю следующее сообщение об ошибке:Oracle MAF - Запрос местоположения GPS приводит к неустранимым OS в Android 6.0
07-14 02:00:15.204 2657 2657 D AndroidRuntime: Shutting down VM
07-14 02:00:15.204 2657 2657 E AndroidRuntime: *** FATAL EXCEPTION IN SYSTEM PROCESS: main
07-14 02:00:15.204 2657 2657 E AndroidRuntime: java.lang.IllegalArgumentException: provider doesn't exist: network
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at com.android.server.LocationManagerService.requestLocationUpdatesLocked(LocationManagerService.java:1637)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at com.android.server.LocationManagerService.requestLocationUpdates(LocationManagerService.java:1616)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at android.location.LocationManager.requestLocationUpdates(LocationManager.java:880)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at android.location.LocationManager.requestLocationUpdates(LocationManager.java:496)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at com.android.location.fused.FusionEngine.enableProvider(FusionEngine.java:142)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at com.android.location.fused.FusionEngine.updateRequirements(FusionEngine.java:195)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at com.android.location.fused.FusionEngine.setRequest(FusionEngine.java:118)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at com.android.location.fused.FusedLocationProvider$1.handleMessage(FusedLocationProvider.java:98)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:102)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at android.os.Looper.loop(Looper.java:148)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at com.android.server.SystemServer.run(SystemServer.java:285)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at com.android.server.SystemServer.main(SystemServer.java:170)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
07-14 02:00:15.204 2657 2657 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
аварийно завершает работу операционной системы и перезагрузки. Это происходит и в моем собственном приложении, когда я вызываю метод startUpdatingPosition в экземпляре deviceManager.
deviceManager.startUpdatingPosition(300, true, "MapBean.mainGeoListener", bean)
"deviceManager.getCurrentPosition" также не работает. Полный код, указанный ниже.
Этот сбой возникает только при объединении Android 6.0 с эмулированным Samsung s6 в GenyMotion (я не могу протестировать реальное устройство). Android 6.0 на моем физическом Samsung s5 не имеет этой проблемы. И Android 5.1 с любым (эмулированным) устройством также не имеет этой проблемы.
Вот мой набор вверх:
- Oracle Enterprise Пакет для Затмения (12.2.1.3.1) - В "Неон" пакет
- Устройство: Samsung Genymotion S6 эмулировать устройство, работает Android 6.0.0 (API23)
- SDK: построить инструменты/платформенные инструменты 24
- SDK инструменты 25.1.7
я сделал некоторые исследование новой системы разрешений для Android 6.0, и я обеспокоен тем, что это является причиной проблемы, однако ничто из того, что я до сих пор не читал, предлагает какое-либо решение.
Я также планирую выяснить, является ли это проблемой только с GenyMotion, однако для меня это несколько сложно, так как приобретение s6 не просто, и у меня нет процессора Intel, поэтому стандартное Android-устройство (AVD)) работает слишком медленно, чтобы проверить его там. Любая помощь со стороны сообщества в этом отношении была бы весьма признательна (пример «DeviceDemo» из оракула довольно легко проверить).
Вот нить обновления позиции обработки:
package bsaf.atlas.atlasapplication;
import oracle.adf.model.datacontrols.device.DeviceManager;
import oracle.adf.model.datacontrols.device.DeviceManagerFactory;
public class ConnectionListener extends Thread {
private DeviceManager deviceManager;
private MapCore bean;
public ConnectionListener(MapCore paramBean)
{
this.bean = paramBean;
this.deviceManager = DeviceManagerFactory.getDeviceManager();
System.out.println("I have been created!");
}
public void run()
{
while(true)
{
try
{
System.out.println("Connection thread trying to hook to listener");
bean.setLocationWatcherID(deviceManager.startUpdatingPosition(300, true, "MapBean.mainGeoListener", bean));
System.out.println("Setting immediate position");
bean.setUserLocation(deviceManager.getCurrentPosition(500, true));
System.out.println("Hook success: " + bean.getLocationWatcherID());
break;
}
catch (oracle.adfmf.framework.exception.AdfException e)
{
System.out.println("Connection Listener Exception:" + e);
try {
System.out.println("Sleeping thread to retry");
Thread.sleep(500);
} catch (InterruptedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
Мне удалось проверить это на Samsung Galaxy S6, работающем Android 6.01 и никаких сбоев нет, поэтому это проблема с GenyMotion. Я скоро свяжусь с их технической поддержкой и отвечу сюда своими выводами. – Rohan