Google地图不会加载到我的应用设备中 [英] Google map doesn't load into my app device
问题描述
我是android开发的新手。我正在使用互联网和后续教程自学。我正在制作一个应用程序,它有3个标签
,一个用于位置
第二个用于相机
第三个是图片
。为此,我在 android studio
中使用标签活动
。在里面,我使用 mapView
,然后按照这个
我试图进入权限检查,但不能成功,因为我是一个新手,所以我正面临困难找到正确的解决方案(S)
更新1
更新我的代码后,看起来像
mMapView.getMapAsync(new OnMapReadyCallback(){
,错误为'错误:任务执行失败':app:transformClassesWithDexForDebug' com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.dex.DexIndexOverflowException:方法ID不在[0,0xffff]中: 65536`
$ b @Override
public void onMapReady(GoogleMap googleMap){
if(Build.VERSION.SDK_INT> = Build.VERSION_CODES。 M){
if(ActivityCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED
&& am磷; ActivityCompat.checkSelfPermission(getActivity(),Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String [] {
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
},1);
}
else
{
googleMap.setMyLocationEnabled(true);
LatLng loc = new LatLng(31.492370,74.329060);
googleMap.addMarker(new MarkerOptions()。position(loc).title(I am Here));
//用于自动缩放到标记位置
CameraPosition cameraPosition = new CameraPosition.Builder()。target(loc).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
}
}
}
});
$ b $ @Override
public void onRequestPermissionsResult(int requestCode,String permissions [],int [] grantResults){
super.onRequestPermissionsResult(requestCode,permissions,grantResults) ;
switch(requestCode){
案例1:{
//如果请求被取消,结果数组为空。
if(grantResults.length> 0
&&& amp; grantResults [0] == PackageManager.PERMISSION_GRANTED){
} else {
// permission denied ,嘘!禁用依赖此权限的
//功能。
// finish();
}
return;
}
//其他'case'行检查其他
//权限此应用可能请求
}
}
$ c $我在我的Android设备API 16
上测试它,它给了我<$ c
$ c $ build>失败
任何帮助将不胜感激
解决方案对于Android版本> = M
,必须在运行系统询问权限,这不能自动完成。一般运行时权限
询问代码。如果在Fragment
而不是这个
中,使用getActivity()
。@Override
public void onMapReady(GoogleMap googleMap){
if(Build.VERSION.SDK_INT> = Build.VERSION_CODES.M){
if(ActivityCompat.checkSelfPermission
(this,Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED
& &
ActivityCompat.checkSelfPermission
(this,Manifest.permission.ACCESS_COARSE_LOCATION)!= PackageManager.PERMISSION_GRANTED)
{
requestPermissions(new String [] {
Manifest。 permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_FINE_LOCATION
},1);
// return;
}
else {
googleMap.setMyLocationEnabled(true);
LatLng loc = new LatLng(31.492370,74.329060);
googleMap.addMarker(new MarkerOptions()。position(loc).title(我在这里));
//用于自动缩放标记的位置
CameraPosition cameraPosition = new CameraPosition.Builder()。target(loc).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
$ / code $ / pre
处理权限:
@Override
public void onRequestPermissionsResult(int requestCode,@NonNull String [] permissions,@NonNull int [] grantResults){
super。 onRequestPermissionsResult(requestCode,permissions,grantResults);
case 1:
if(grantResults [0]!= PackageManager.PERMISSION_GRANTED){
//权限未授予
}
else {
//授予的权限
}
break;
//默认值:
//super.onRequestPermissionsResult (requestCode,permissions,grantResults);
}
//}
}
I am newbie to android development. I am learning on my own using internet and following tutorials. I am making an app which have 3
tabs
, one is forlocation
second is forcamera
and third is forpictures
. For this i am using atabbed activity
insideandroid studio
. Inside it i am usingmapView
and followed this tutorial and done each step used in it. Moreover i have myapiKey
for google map.Below are my codes
Manifest
<uses-permission android:name="com.example.accurat.faisal.permission.MAPS_RECEIVE"/> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="com.google.android.geo.API_KEY" android:value="AIzaSyBhhxKOLbX2I3kNbsZy8lbSXtjuAijKL94" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name=".MainActivity" android:label="@string/app_name" android:theme="@style/AppTheme.NoActionBar"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application>
Location.java
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // inflat and return the layout View rootView = inflater.inflate(R.layout.my_location, container, false); mMapView = (MapView)rootView.findViewById(R.id.mapView); mMapView.onCreate(savedInstanceState); mMapView.onResume(); try { MapsInitializer.initialize(getActivity().getApplicationContext()); }catch (Exception e) { e.printStackTrace(); } mMapView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { googleMap.setMyLocationEnabled(true); LatLng loc = new LatLng(31.492370,74.329060); googleMap.addMarker(new MarkerOptions().position(loc).title("I am here")); // For zooming automatically to the location of the marker CameraPosition cameraPosition = new CameraPosition.Builder().target(loc).zoom(12).build(); googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); } }); return rootView; }
Location layout
<TextView android:id="@+id/section_label" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.google.android.gms.maps.MapView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/mapView" />
Moreover at
googleMap.setMyLocationEnabled(true);
i am getting a red line which saysI have tried to enter the permission check but couldn't succeed, as i am a newbie so i am facing difficulties finding the right solution(s)
Update 1
After updating my code look like
mMapView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if(ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{ Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION },1); } else { googleMap.setMyLocationEnabled(true); LatLng loc = new LatLng(31.492370,74.329060); googleMap.addMarker(new MarkerOptions().position(loc).title("I am Here")); // For zooming automatically to the location of the marker CameraPosition cameraPosition = new CameraPosition.Builder().target(loc).zoom(12).build(); googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); } } } }); @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case 1: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { } else { // permission denied, boo! Disable the // functionality that depends on this permission. //finish(); } return; } // other 'case' lines to check for other // permissions this app might request } }
I am testing it on my android device
API 16
and it's giving mebuild failed
with error `Error:Execution failed for task ':app:transformClassesWithDexForDebug'.com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: java.util.concurrent.ExecutionException: com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536`
Any help would be appreciated
解决方案For the
Android Version >= M
, the permission has to be asked at Runtime, which can not be done automatically. A generalRuntime Permission
asking code. UsegetActivity()
if insideFragment
instead ofthis
.@Override public void onMapReady(GoogleMap googleMap) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if(ActivityCompat.checkSelfPermission (this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission (this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { requestPermissions(new String[]{ Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION }, 1); //return; } else{ googleMap.setMyLocationEnabled(true); LatLng loc = new LatLng(31.492370,74.329060); googleMap.addMarker(new MarkerOptions().position(loc).title("I am here")); // For zooming automatically to the location of the marker CameraPosition cameraPosition = new CameraPosition.Builder().target(loc).zoom(12).build(); googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); } }
Handle permission:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); case 1: if (grantResults[0] != PackageManager.PERMISSION_GRANTED){ // permission not granted } else { // permission granted } break; //default: //super.onRequestPermissionsResult(requestCode, permissions, grantResults); } //} }
这篇关于Google地图不会加载到我的应用设备中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文