我尝试在Android设备上获取用户的位置.程序检查GPS可用性.如果禁用GPSProvider,则会警告用户.如果用户未启用GPS,请对networkProvider进行程序检查.
检查网络提供商的代码,
public boolean askNetworkProvider(){
if(!locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
AlertDialog builder = new AlertDialog.Builder(context)
.setMessage("Enable Network Connection")
.setTitle("Warning!")
.setCancelable(true)
.setPositiveButton("OK", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
return;
}
} ).show();
}
if(locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER)){
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 2000, 0, networkListener);
mlocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
Log.i(LocationService.class.getName(),"Network Enable!!");
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
即使wifi和移动连接被禁用,它也表示networkProvider已启用并输入第二个if语句.但它应该是假的.我该如何解决?
我通过Intent.its调用ACTION_LOCATION_SOURCE_SETTINGS显示无法解析或不是从外部导入Project时导致的字段.我现在应该怎么做 ?
Intent viewIntent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(viewIntent);
Run Code Online (Sandbox Code Playgroud) 我想在发布版本类型的Android应用中模拟位置.我创造了一种特殊的味道"可模仿"的清单app/src/mockable/AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
</manifest>
Run Code Online (Sandbox Code Playgroud)
但似乎Android lint阻止在发布版本类型中使用此权限.对于命令:
./gradlew assembleRelease
Run Code Online (Sandbox Code Playgroud)
我有输出:
:app:lintVitalMockableRelease
/home/fr/app/src/mockable/AndroidManifest.xml:3: Error: Mock locations should only be requested in a debug-specific manifest file (typically src/debug/AndroidManifest.xml) [MockLocation]
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Explanation for issues of type "MockLocation":
Using a mock location provider (by requiring the permission
android.permission.ACCESS_MOCK_LOCATION) should only be done in debug
builds. In Gradle projects, that means you should only request this
permission in a debug source set specific manifest …Run Code Online (Sandbox Code Playgroud) 我们目前正在尝试从Android手机请求GPS权限,以便我们可以在Google地图上显示当前位置.我们在清单标记下包含了应用程序标记之外的清单:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)
以下是我们的代码无法正常工作的部分,它无法识别MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION:
if (ActivityCompat.checkSelfPermission(this,
android.Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
android.Manifest.permission.ACCESS_FINE_LOCATION)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets …Run Code Online (Sandbox Code Playgroud) android android-manifest android-location android-permissions
我尝试根据当前位置使用特定语言获取城市,我之前这样做过,如下所示,一切都很好,但在我的新项目中它不起作用!
Geocoder geo = new Geocoder(getApplicationContext(), new Locale("ja"));
List<Address> addresses = null;
try {
addresses = geo.getFromLocation(location.getLatitude(), location.getLongitude(), 1);
if (addresses.size() > 0) {
Log.d("CITY",addresses.get(0).getLocality());
city.setText(addresses.get(0).getLocality());
} else {
// do your stuff
}
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
无论设置哪种语言,城市名称始终以英语返回!
我试图通过在 AndroidManifest.xml 中声明来从 GPS 或使用这些权限的网络提供商获取当前位置,
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
Run Code Online (Sandbox Code Playgroud)
我在运行时验证权限,
ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED)
Run Code Online (Sandbox Code Playgroud)
和
ActivityCompat.checkSelfPermission(context, android.Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED
Run Code Online (Sandbox Code Playgroud)
对于 Android SDK 版本 22,它工作得很好,而在 SDK 版本 25 中,尽管在 AndroidManifest.xml 中声明了权限,但它在运行时并未得到反映。
我检查了这些权限是否被授予,
adb shell dumpsys 包 com.abc.xyz
当我尝试使用 adb shell 授予权限时,在 SDK-25 上运行的应用程序未授予权限,如下所示:
adb shell pm grant com.abc.xyz android.Manifest.permission.ACCESS_COARSE_LOCATION
我怀疑 Android 从 SDK 版本 25 开始授予这些权限(如果我错了,请纠正我)。仅通过谷歌搜索,我无法弄清楚 SDK 版本之间的权限级别/严重性如何变化。
请帮我了解一下。
android android-manifest android-location android-permissions
嗨我正在使用以下代码显示用户在当前位置和他的汽车位置之间的方向.
String uri = String.format(Locale.ENGLISH, "http://maps.google.com/maps?saddr=%f,%f(%s)&daddr=%f,%f (%s)", curLat, curLong, "Your location", carLat, carLong, "Your vehicle location");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(uri));
intent.setClassName("com.google.android.apps.maps", "com.google.android.maps.MapsActivity");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
这很好但我需要在进入导航活动之前按下开始导航.我想要的是我需要直接进入导航活动,而无需按下开始导航按钮.
你可以在下面看到.左边的图像是我先得到的图像.点击底部的开始导航按钮后,我将轮流转向导航(右图).是否有可能直接转向默认Android应用程序的导航转向?

为什么我们需要设置开/关GPS,另一方面我们可以通过编程方式打开/关闭WIFI和蓝牙而无需移动设置.Android指南已更改为4.0以上版本.对于4.0以上的版本,您无法以编程方式更改GPS.
gps android android-intent android-location google-play-services