2017-11-09 9 views
1

を呼び出さない:のAndroid 6.0+:メソッドonRequestPermissionsResultはここに私の地図の断片を

public class MapFragmentTab extends Fragment implements OnMapReadyCallback { 
    private GoogleMap googleMap; 
    private GoogleApiClient mGoogleApiClient; 
    private static final int MY_PERMISSION_LOCATION = 1; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     rootView = inflater.inflate(R.layout.map_fragment_tab, container, false); 
     init(); 
     return rootView; 
    } 

    private void init() { 
     if (mGoogleApiClient == null) { 
      mGoogleApiClient = new GoogleApiClient.Builder(getActivity()) 
        .addApi(LocationServices.API) 
        .build(); 
     } 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) 
     mapView = rootView.findViewById(R.id.mapView); 
     if (mapView != null) { 
      mapView.onCreate(null); 
      mapView.onResume(); 
      mapView.getMapAsync(this); 
     } 
    } 

    @Override 
    public void onMapReady(GoogleMap map) { 
     googleMap = map;  
     int permissionCheck = ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION); 
     if (permissionCheck != PackageManager.PERMISSION_GRANTED) { 
      ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_LOCATION); 
     } else {     
     } 
    } 

    @Override 
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 
     // some code here 
     } 
    }   

すべての作業罰金のAndroid 4.3に。

しかし、最初にAndroid 6.0+で開始するときは、許可のためのプロンプトダイアログを表示してください。このような何か:

Allow My application to access this device's location? 

Deny Allow 

私はをクリックし許可するが、方法onRequestPermissionsResultは呼び出しません。 私のコードで何が問題になっていますか?

答えて

1

の代わりに、このような呼び出し

requestPermissions(new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_LOCATION, PERMISSIONS_CODE) 

あなたがandroid.support.v4.app.Fragmentを使用している場合は、あなたがrequestPermissionsを呼び出す必要があり

ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_PERMISSION_LOCATION) 
を呼び出します。

AppCompatActivityの場合は、ActivityCompat.requestPermissionsを使用してください。

0

パーミッション結果のコールバックがフラグメントでトリガされることはありません。これを行うには、onRequestPermissionsResultをアクティビティに実装し、コールバックをフラグメントに転送する必要があります。

@Override 
public void onRequestPermissionsResult(int requestCode, @NonNull String[] 
permissions, @NonNull int[] grantResults) { 
super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
List<Fragment> fragments = getSupportFragmentManager().getFragments(); 
if (fragments != null) { 
    for (Fragment fragment : fragments) { 
     fragment.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    } 
} 
} 
関連する問題