2016-09-12 1 views
0

Ich versuche, Google Map v2 auf meiner Android-Anwendung zu verwenden. Alles funktioniert auf dem Emulator, aber wenn ich setMyLocationEnabled (true) auf meiner Karte verwende, stürzt es auf dem tatsächlichen Gerät ab.Android stürzt nach der Verwendung von setMyLocationEnabled auf mapcallback auf dem tatsächlichen Gerät

das Gerät ist lg x-cam mit Android v6.

hier ist mein Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.latest" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="17" 
     android:targetSdkVersion="24" /> 


    <permission 
     android:name="com.example.latest.permission.MAPS_RECEIVE" 
     android:protectionLevel="signature" /> 

    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true" /> 



    <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" /> 
    <uses-permission android:name="com.example.latest.permission.MAPS_RECEIVE" /> 



    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/Theme.AppCompat.Light" 
     > 

     <meta-data 
     android:name="com.google.android.geo.API_KEY" 
     android:value="my valid api key is here"/> 

     <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" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 

mein MainActivity:

package com.example.latest; 

import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.SupportMapFragment; 
import com.google.android.gms.maps.model.BitmapDescriptorFactory; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.Marker; 
import com.google.android.gms.maps.model.MarkerOptions; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback { 

    static final LatLng HAMBURG = new LatLng(53.558, 9.927); 
    static final LatLng KIEL = new LatLng(53.551, 9.993); 
    SupportMapFragment mapFragment; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
     mapFragment.getMapAsync(this); 

    } 

    @Override 
    public void onMapReady(GoogleMap map) { 
     map.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     map.setMyLocationEnabled(true); 
     map.getUiSettings().setZoomControlsEnabled(true); 
     map.getUiSettings().setCompassEnabled(true); 
     map.getUiSettings().setZoomGesturesEnabled(true); 
     map.getUiSettings().setMyLocationButtonEnabled(true); 
     map.getUiSettings().setMapToolbarEnabled(true); 

    } 

} 

mein activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" > 

    <fragment 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     class="com.google.android.gms.maps.SupportMapFragment" /> 

</RelativeLayout> 

, wie ich dieses Problem beheben?

+1

Beitrag voll * Stack-Trace *. Wenn Sie mit 'SDK' Version' 6.0' arbeiten, müssen Sie 'Run Time Permission' angeben. –

+0

Stellen Sie sicher, dass Sie die richtigen Berechtigungen anfordern: https://developer.android.com/training/permissions/requesting.html –

+0

@jaydroider welchen Code sollte ich in meiner Tätigkeit für diese Angelegenheit verwenden? Kannst du genauer sein? Vielen Dank –

Antwort

2

Verwenden Sie Android M? In diesem Fall reicht es nicht aus, Berechtigungen im Manifest zu deklarieren. Bei einigen Berechtigungen müssen Sie den Benutzer explizit zur Laufzeit fragen:

Überprüfen Sie diese Link für Laufzeit Berechtigung.

Codeausschnitt.

Definieren Sie dies global.

private static final int PERMISSION_REQUEST_CODE = 1; 

Und dieser Wille geht in onCreate.

if (ContextCompat.checkSelfPermission(Maps_Activity.this, 
     Manifest.permission.ACCESS_FINE_LOCATION) 
     != PackageManager.PERMISSION_GRANTED) { 

    // Should we show an explanation? 
    if (ActivityCompat.shouldShowRequestPermissionRationale(Maps_Activity.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. 

    } else { 

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

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


    } 
} 

Und dann overrride onRequestPermissionsResult.

@Override 
public void onRequestPermissionsResult(int requestCode, 
             String permissions[], int[] grantResults) { 
    switch (requestCode) { 
     case PERMISSION_REQUEST_CODE: { 
      // 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. 
      } 
      return; 
     } 

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

ACCESS_FINE_LOCATION kann nicht aufgelöst werden oder ist kein Feld. Wie gehe ich mit diesem Fehler um? –

+0

Versuchen Sie, diese 'android.Manifest.permission.ACCESS_FINE_LOCATION'. –

+0

es funktioniert wie ein Charme. danke dir –

Verwandte Themen