1

아아! 많은 노력과 검색 후에 나는 내 문제를 발견 할 수 없었다. Google지도에서 현재 위치를 찾고 싶지만 여전히 오류가 있습니다 (필요한 권한).setMyLocationEnable에 대해 거부 될 수있는 호출 권한 android

호출은 사용자에 의해 거부 될 수 있습니다 권한이 필요합니다 : 명시 적으로 해야 코드가 gMap.setMyLocationEnable(true);에서 처리를 명시 적으로 잠재적 인 '보안 예외'

을 권한을 사용할 수 있는지 확인 (체크 권한) 또는 아무도 내가 그것을 고칠 수있는 방법을 안내해 주시겠습니까? 내 코드는 아래와 같습니다.

AddMasjid.java

package com.example.saroosh.masjidnow.Tabs; 

import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

import com.example.saroosh.masjidnow.R; 
import com.google.android.gms.maps.CameraUpdateFactory; 
import com.google.android.gms.maps.GoogleMap; 
import com.google.android.gms.maps.MapFragment; 
import com.google.android.gms.maps.MapView; 
import com.google.android.gms.maps.MapsInitializer; 
import com.google.android.gms.maps.OnMapReadyCallback; 
import com.google.android.gms.maps.model.LatLng; 
import com.google.android.gms.maps.model.MarkerOptions; 

public class AddMasjid extends Fragment implements OnMapReadyCallback{ 

    MapView gMapView; 
    GoogleMap gMap = null; 

    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View v =inflater.inflate(R.layout.add_masjid,container,false); 

     gMapView = (MapView) v.findViewById(R.id.map); 
     gMapView.getMapAsync(this); 
     gMapView.onCreate(savedInstanceState); 
     gMapView.onResume(); // needed to get the map to display immediately 
     try { 
      MapsInitializer.initialize(getActivity().getApplicationContext()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return v; 
    } 


    @Override 
    public void onMapReady(GoogleMap map) { 
     gMap = map; 
     gMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new 
       LatLng(0, 0), 0)); 

     if (gMap != null) { 
      gMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 


      gMap.setMyLocationEnabled(); 
     } 
    } 
    @Override 
    public void onResume() { 
     super.onResume(); 
     gMapView.onResume(); 

    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     gMapView.onPause(); 

    } 

    @Override 
    public void onDestroy() { 
     super.onDestroy(); 
     gMapView.onDestroy(); 
    } 

    @Override 
    public void onLowMemory() { 
     super.onLowMemory(); 
     gMapView.onLowMemory(); 
    } 


} 

add_masjid.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" 
    android:background="#000000"> 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/editText1" 
     android:layout_alignBottom="@+id/editText1" 
     android:layout_alignParentStart="true" 
     android:text="@string/xyz" 
     android:textColor="#FFFFFF" 
     android:textSize="20sp" 
     /> 

    <Button 
     android:id="@+id/generalId" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentTop="true" 
     android:background="@drawable/rect1" 
     android:onClick="geoLocate" 
     android:text="@string/abc" 
     android:textColor="#FFFFFF" 
     android:textSize="20sp" /> 

    <EditText 
     android:id="@+id/editText1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_toEndOf="@+id/textView1" 
     android:layout_toStartOf="@+id/generalId" 
     android:ems="10" 
     android:inputType="text" 
     android:background="#FFFFFF" 
     android:labelFor="@+id/editText1" 
     android:layout_above="@+id/map" 
     android:layout_alignParentTop="true" /> 

    <com.google.android.gms.maps.MapView 
     android:id="@+id/map" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@+id/generalId"> 

    </com.google.android.gms.maps.MapView> 

</RelativeLayout> 
+0

당신은 전화 이러한 종류의 수행하는 사용자의 권한이있는 경우 먼저 확인하지 않고이 작업을 수행 할 수 없습니다 - 오류이 알려주는 것입니다. 사용자가 앱을 허용했는지 여부를 명시 적으로 확인해야합니다. – rmcsharry

+1

네, 해냈습니다. 내 아래 답변을 참조하십시오. –

답변

1

난 그냥 몇 가지 권한을 추가하여 내 문제를 해결했다.

@Override 
    public void onMapReady(GoogleMap map) { 
     gMap = map; 
     gMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); 
     gMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new 
       LatLng(0, 0), 0)); 

    //add this code... 
     if (gMap != null) { 
      gMap.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker")); 
      if (ActivityCompat.checkSelfPermission(getActivity().getApplicationContext() 
        , Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getActivity().getApplicationContext() 
        , Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       // TODO: Consider calling 
       // ActivityCompat#requestPermissions 
       // here to request the missing permissions, and then overriding 
       // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
       //           int[] grantResults) 
       // to handle the case where the user grants the permission. See the documentation 
       // for ActivityCompat#requestPermissions for more details. 
       return; 
      } 
      gMap.setMyLocationEnabled(true); 
      gMap.getUiSettings().setMyLocationButtonEnabled(true); 


     } 
    }