无法使用emulataor获取我的位置

时间:2015-09-18 08:43:53

标签: android google-maps

我正在尝试开发Google地图应用程序。

演示应用程序在真实设备上运行良好,但在模拟器上失败。

logcat输出如下:

java.lang.RuntimeException: Unable to start activity ComponentInfo{il.co.talkie.mapdemo/il.co.talkie.mapdemo.MapDemoActivity}: java.lang.SecurityException: "passive" location provider requires ACCESS_FINE_LOCATION permission.
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
 Caused by: java.lang.SecurityException: "passive" location provider requires ACCESS_FINE_LOCATION permission.
        at android.os.Parcel.readException(Parcel.java:1599)
        at android.os.Parcel.readException(Parcel.java:1552)
        at android.location.ILocationManager$Stub$Proxy.requestLocationUpdates(ILocationManager.java:606)
        at android.location.LocationManager.requestLocationUpdates(LocationManager.java:880)
        at android.location.LocationManager.requestLocationUpdates(LocationManager.java:464)
        at il.co.talkie.mapdemo.MapDemoActivity.getMyLocation(MapDemoActivity.java:170)
        at il.co.talkie.mapdemo.MapDemoActivity.onCreate(MapDemoActivity.java:106)
        at android.app.Activity.performCreate(Activity.java:6237)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
        at android.app.ActivityThread.-wrap11(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

MapDemoActivity的第170行是

locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0,0, this);

清单文件具有这些权限(否则它将无法在真实设备上运行),如下所示:

的Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="il.co.talkie.mapdemo" >

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<permission
    android:name="com.javapapers.currentlocationinmap.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <meta-data
        android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key" />

    <activity
        android:name=".MapDemoActivity"
        android:label="@string/title_activity_map_demo" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

我想使用模拟器获取我的位置 - 它显示谷歌地图,它找到我提供的地址的位置,但它拒绝获取我的位置 - 所以我无法正确计算距离。

有什么问题? 我使用的模拟器是为API 23和目标Google API创建的。 欢迎任何帮助。

2 个答案:

答案 0 :(得分:0)

如果您在Android M上使用模拟器,您将需要请求用户的许可,尽管您的清单。参见

ACCESS_FINE_LOCATION permission error emulator only

Android M Google API's to use Google Maps and other permissions

您可以查看文章/教程,例如this使用新系统或仅定位较低的API&lt; = 22

答案 1 :(得分:0)

由于此问题而发生错误:

引起:java.lang.SecurityException:&#34;被动&#34;位置提供程序需要ACCESS_FINE_LOCATION权限。

只需向您的应用清单添加新权限:

uses-permission android:name =&#34; android.permission.ACCESS_FINE_LOCATION&#34; /&gt;