学校项目需要 Android Studio/OSMDroid 指南
Posted
技术标签:
【中文标题】学校项目需要 Android Studio/OSMDroid 指南【英文标题】:Need a Android Studio/OSMDroid Guide for a school project 【发布时间】:2016-08-20 02:09:15 【问题描述】:我目前正在开发一个用于学校/考试目的的应用程序。 我正在使用 android Studio 2.0 和带有 5.1.1 的 OPO 以及带有 6.0.1 的 Nexus 7!
目标是在地图上显示设备的位置,并追踪经过路标(文化建筑)的路线。
我显示地图没有问题(我可以将它以我的城市为中心并具有良好的缩放级别)
现在我想显示设备的当前位置。 我遇到权限问题..
我的清单:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="alpha.testmap">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
// AUTORISATIONS
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
我的 MainActivity.java:
package alpha.testmap;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import org.osmdroid.api.IMapController;
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
public class MainActivity extends Activity
private LocationManager mLocMgr;
@Override public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(this,
new String[]Manifest.permission.ACCESS_COARSE_LOCATION,
//Can't find the class of this fonction --> REQUEST_LOCATION);
else
Location myLocation = LOCATION_SERVICE.FusedLocationApi.getLastLocaation(mGoogleApiClient);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)
ActivityCompat.requestPermissions(this,
new String[]Manifest.permission.ACCESS_FINE_LOCATION,
//Can't find the class of this fonction --> REQUEST_LOCATION);
setContentView(R.layout.activity_main);
MapView map = (MapView) findViewById(R.id.map);
map.setTileSource(TileSourceFactory.MAPNIK);
//Adding zoom ability
map.setBuiltInZoomControls(true);
map.setMultiTouchControls(true);
//Create a default point
IMapController mapController = map.getController();
mapController.setZoom(16);
GeoPoint ptStart = new GeoPoint(47.215576, -1.549089);
mapController.setCenter(ptStart);
GeoPoint ptTourLu = new GeoPoint(47.21545, -1.54624);
//GPS
mLocMgr = (LocationManager) getSystemService(LOCATION_SERVICE);
mLocMgr.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 100, (LocationListener) this);
【问题讨论】:
您在权限方面遇到了什么问题?请详细说明。每当您向某人解释您的问题时,作为生活中的一条好规则,将对方视为一个什么都不知道的婴儿。所以要努力让对方理解。 我正在尝试获取设备的位置。当我测试是否授予权限时,requestPermissions 的最后一个参数不会编译.. ActivityCompat.requestPermissions(this, new String[]Manifest.permission.ACCESS_COARSE_LOCATION, REQUEST_LOCATION); 查看示例 osmdroid 项目。您的代码缺少重要的 MyLocationOverlay,它会在地图上为您的位置放置一个图标。 【参考方案1】:您的权限问题是由于 Android 6.0 带来的更改要求您在运行时请求权限,而不是像以前那样在安装时请求。
您可以在“清单”部分阅读更多 here。
【讨论】:
以上是关于学校项目需要 Android Studio/OSMDroid 指南的主要内容,如果未能解决你的问题,请参考以下文章