2017-06-05 68 views

回答

4

在运行时请求许可使用设备如下当前的位置:

if (ActivityCompat.checkSelfPermission(YourActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(YourActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
     ActivityCompat.requestPermissions(YourActivity.this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1); 
     return; 
}else{ 
    // Write you code here if permission already given. 
} 
1

你可以像下面这样做

在清单:

<uses-feature android:name="android.hardware.location.gps" /> 

在你想要这个许可请求的活动:

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

然后通过使用该功能获得用户回答:

public void onRequestPermissionsResult(int requestCode, String permissions[], int[] 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. 
     } 
    return; 
    } 
     // other 'case' lines to check for other 
     // permissions this app might request 
} 
} 

如果用户接受一次,那么你的应用程序会记住它,你不需要再发送这个DialogBox。请注意,如果用户决定,用户可以稍后禁用它。然后请求该位置之前,你必须以测试权限授予依旧:

public boolean checkLocationPermission() 
{ 
String permission = "android.permission.ACCESS_FINE_LOCATION"; 
int res = this.checkCallingOrSelfPermission(permission); 
return (res == PackageManager.PERMISSION_GRANTED); 
} 
1

首先,你需要写一个类,你将定义授予和检查用户位置的权限的方法。

public class CheckPermission { 

    // CHECK FOR LOCATION PERMISSION 
    public static boolean checkPermission(Activity activity){ 
     int result = ContextCompat.checkSelfPermission(activity, Manifest.permission.ACCESS_FINE_LOCATION); 
     if (result == PackageManager.PERMISSION_GRANTED){ 

      return true; 

     } else { 

      return false; 

     } 
    } 

    //REQUEST FOR PERMISSSION 
    public static void requestPermission(Activity activity, final int code){ 

     if (ActivityCompat.shouldShowRequestPermissionRationale(activity,Manifest.permission.ACCESS_FINE_LOCATION)){ 

      Toast.makeText(activity,"GPS permission allows us to access location data. Please allow in App Settings for additional functionality.",Toast.LENGTH_LONG).show(); 

     } else { 

      ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},code); 
     } 
    } 

} 

现在您可以调用以上两种静态方法来检查或授予活动中的权限。

public class LocationActivity extends AppCompatActivity { 


    private GPSTracker mytracker; 
    private Location myLocation; 
    private double latitude=0.0d,longitude=0.0d; 
    public final static int TAG_PERMISSION_CODE=1; 

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

     if(!CheckPermission.checkPermission(LocationActivity.this)) { 
      CheckPermission.requestPermission(SplashScreenActivity.this,TAG_PERMISSION_CODE); 

     } 
    } 
} 
相关问题