gpt4 book ai didi

android - Osmdroid 在 Android 6.0 上运行不佳

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:30 25 4
gpt4 key购买 nike

我使用 Osmdroid 4.2 创建了一个 Android 应用程序。一切正常,但在过去的两周里,我在装有 Android 6.0 的 Nexus 设备上发现了问题:OSM map 未加载,你只能在 map 上看到灰色背景。 map block 在 Android 6.0 上不显示。

最佳答案

osmdroid 示例应用最近更新为支持 android m。基本上,您必须向用户询问网络和存储访问的明确权限。

这将引导您了解基础知识 http://developer.android.com/training/permissions/requesting.html

这是相关的 OSMdroid 票证 https://github.com/osmdroid/osmdroid/issues/178

这是要复制并粘贴到您的启动 Activity 中的相关代码。注意,需要 23 个构建工具

导入java.util.ArrayList;

import android.Manifest;
import android.app.ListActivity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

import org.osmdroid.MapActivity;

public class SampleLoader extends ListActivity {
// ===========================================================
// Constants
// ===========================================================

// ===========================================================
// Fields
// ===========================================================

final int INTERNET=1;
final int NETSTATE=2;
final int LOCATION=3;
final int LOCATIONC=4;
final int WIFI=5;
final int STORAGE=6;
// ===========================================================
// Constructors
// ===========================================================

/** Called when the activity is first created. */
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.INTERNET);
if (permissionCheck != PackageManager.PERMISSION_GRANTED){
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.INTERNET)) {

// Show an expanation 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.
Toast.makeText(this, "Need internet access to get map tiles if working with online sources", Toast.LENGTH_LONG).show();

} else {

// No explanation needed, we can request the permission.

ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.INTERNET},
INTERNET);
}
}

permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_NETWORK_STATE);

if (permissionCheck != PackageManager.PERMISSION_GRANTED){
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_NETWORK_STATE)) {

// Show an expanation 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.
Toast.makeText(this, "Need to check network state", Toast.LENGTH_LONG).show();

} else {

// No explanation needed, we can request the permission.

ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_NETWORK_STATE},
NETSTATE);

}
}

permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION);
if (permissionCheck != PackageManager.PERMISSION_GRANTED){
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_FINE_LOCATION)) {

// Show an expanation 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.
Toast.makeText(this, "Need your location to place an icon on the map", Toast.LENGTH_LONG).show();

} else {

// No explanation needed, we can request the permission.

ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
LOCATION);

}
}

permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_COARSE_LOCATION);
if (permissionCheck != PackageManager.PERMISSION_GRANTED){
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_COARSE_LOCATION)) {

// Show an expanation 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.
Toast.makeText(this, "Need your location to place an icon on the map", Toast.LENGTH_LONG).show();

} else {

// No explanation needed, we can request the permission.

ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_COARSE_LOCATION},
LOCATIONC);

}
}

permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_WIFI_STATE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED){
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.ACCESS_WIFI_STATE)) {

// Show an expanation 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.
Toast.makeText(this, "Access WIFI state", Toast.LENGTH_LONG).show();

} else {

// No explanation needed, we can request the permission.

ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_WIFI_STATE},
WIFI);

}
}

permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permissionCheck != PackageManager.PERMISSION_GRANTED){
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {

// Show an expanation 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.
Toast.makeText(this, "We store tiles to your devices storage to reduce data usage and for reading offline tile stores", Toast.LENGTH_LONG).show();

} else {

// No explanation needed, we can request the permission.

ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
STORAGE);

}
}

}

@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case INTERNET:{
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay!
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(this,"Online map sources will be unavailable", Toast.LENGTH_LONG).show();
}
return;
}
case NETSTATE: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay!
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(this,"Online map sources will be unavailable", Toast.LENGTH_LONG).show();
}
return;
}
case LOCATION:{
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay!
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(this,"My location will be unavailable via GPS", Toast.LENGTH_LONG).show();
}
return;
}
case LOCATIONC:
{
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay!
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(this,"My location will be unavailable via Network providers", Toast.LENGTH_LONG).show();
}
return;
}
case STORAGE:{
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay!
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(this,"Offline map data and caching will be unavailable", Toast.LENGTH_LONG).show();
}
return;
}
case WIFI:{
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {

// permission was granted, yay!


} else {

// permission denied, boo! Disable the
// functionality that depends on this permission.
Toast.makeText(this,"Data usage may not be optimized.", Toast.LENGTH_LONG).show();

}
return;
}

// other 'case' lines to check for other
// permissions this app might request
}
}
}

关于android - Osmdroid 在 Android 6.0 上运行不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33580183/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com