簡體   English   中英

Oracle MAF-請求GPS位置會導致Android 6.0中出現致命的OS異常

[英]Oracle MAF - Requesting GPS location causes fatal OS exception in android 6.0

當我從MAF的“ DeviceDemo”示例中測試GPS服務時,出現以下錯誤:

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)

操作系統崩潰並重新啟動。 當我在deviceManager實例上調用“ startUpdatingPosition”方法時,也會在我自己的應用程序中發生這種情況。

 deviceManager.startUpdatingPosition(300, true, "MapBean.mainGeoListener", bean)

“ deviceManager.getCurrentPosition”也失敗。 完整代碼如下。

僅當在GenyMotion中將Android 6.0與模擬的三星s6結合使用時,才會發生此崩潰(我無法測試真實的設備)。 我的物理三星s5上的Android 6.0沒有此問題。 帶有任何(模擬)設備的Android 5.1也不存在此問題。

這是我的設置:

  • Oracle Enterprise Pack for Eclipse(12.2.1.3.1)-“ Neon”軟件包
  • 設備:運行Android 6.0.0(API23)的Genymotion Samsung S6仿真設備
  • SDK:構建工具/平台工具24
  • SDK工具25.1.7

我已經對Android 6.0的新權限系統進行了一些研究,並擔心這是問題的根源,但是到目前為止,我所讀到的任何內容都未提出任何解決方案。

我還計划專門調查這是否是GenyMotion的問題,但是這對我來說有點挑戰,因為獲取s6並不簡單,而且我沒有Intel CPU,因此標准的Android虛擬設備(AVD)運行太慢在那里測試。 社區提供的任何幫助將不勝感激(oracle的“ 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();
            }
        }

    }
}

我在運行Android 6.0時遇到了完全相同的問題。 我使用Ionic和ngCordova構建了一個應用程序。 在仿真的5.2設備(Genymotion)上,它可以很好地運行,但在6.0 Genymotion設備上運行,則失敗,並顯示“ java.lang.IllegalArgumentException:提供程序不存在:網絡”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM