Permission issues for location in android Marshmallow applicaton

前端 未结 2 1976
梦如初夏
梦如初夏 2020-12-02 01:19

I am learning to develop an android application for getting device location following Google developers forum: @http://developer.android.com/training/location/retrieve-curre

2条回答
  •  一整个雨季
    2020-12-02 01:42

    Straight forward solution/example for your question:

    package com.my.packagename;
    
    import android.Manifest;
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.content.Context;
    import android.content.pm.PackageManager;
    import android.os.Bundle;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
    private static final int PERMISSION_REQUEST_CODE_LOCATION = 1;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        if (checkPermission(Manifest.permission.ACCESS_FINE_LOCATION,getApplicationContext(),CopyOfMap.this)) {
            fetchLocationData();
        }
        else
        {
            requestPermission(Manifest.permission.ACCESS_FINE_LOCATION,PERMISSION_REQUEST_CODE_LOCATION,getApplicationContext(),CopyOfMap.this);
        }
    }
    
    public static void requestPermission(String strPermission,int perCode,Context _c,Activity _a){
    
        if (ActivityCompat.shouldShowRequestPermissionRationale(_a,strPermission)){
                    Toast.makeText(getApplicationContext(),"GPS permission allows us to access location data. Please allow in App Settings for additional functionality.",Toast.LENGTH_LONG).show();
                } else {
    
                    ActivityCompat.requestPermissions(_a,new String[]{strPermission},perCode);
                }
        }
    
    public static boolean checkPermission(String strPermission,Context _c,Activity _a){
            int result = ContextCompat.checkSelfPermission(_c, strPermission);
            if (result == PackageManager.PERMISSION_GRANTED){
    
                return true;
    
            } else {
    
                return false;
    
            }
        }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
    
            case PERMISSION_REQUEST_CODE_LOCATION:
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    
                    fetchLocationData();
    
                } else {
    
                    Toast.makeText(getApplicationContext(),"Permission Denied, You cannot access location data.",Toast.LENGTH_LONG).show();
    
                }
                break;
    
        }
    }
    
    
        private void fetchLocationData()
        {
        //code to use the granted permission (location)
        }
    }
    

    Here i've made the requestPermission() and checkPermission() method as public static because i can reuse them for other permission requests like phone call, write storage, and others. Hope this will help some one. :-)

提交回复
热议问题