位置侦听器 - 呼叫需要权限,但可能会被用户拒绝

Location Listerner - Call requires permission which may be rejected by user

在之前的应用程序中使用了此代码,一切似乎都正常 - 但今天我收到

通话需要权限,但可能会被用户拒绝

我已经添加了

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

显示并已阅读有关该主题的多个线程,但仍有问题。有没有大佬帮忙啊

public class MainActivity extends AppCompatActivity implements LocationListener
{
    private LocationManager locationManager;
    public static String locationlong;
    public static String locationlati;

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

        TextView tv = (TextView)findViewById(R.id.pig);
        TextView cow = (TextView)findViewById(R.id.cow);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 1, this);
    }
}

基本上从 android 6 开始,您需要在运行时请求某些权限,因此用户可能会拒绝它们。

使用 checkSelfPermission(..) 请求它并覆盖 onRequestPermissionsResult 以查看答案。

这里是 link 的完整示例:

https://developer.android.com/training/permissions/requesting.html

在您的activity中添加权限检查:

在您的代码中:

 @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    TextView tv = (TextView) findViewById(R.id.pig);
    TextView cow = (TextView) findViewById(R.id.cow);
    if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION}, 0);
    }
    locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    if (checkLocationPermission()) {
        locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10000, 1, this);
    }


}

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

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {

        case 0: {
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Toast.makeText(getApplicationContext(), "Permission granted", Toast.LENGTH_SHORT).show();

            } else {
                Toast.makeText(getApplicationContext(), "Permission denied", Toast.LENGTH_SHORT).show();
            }
            return;
        }

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

@Override
public void onLocationChanged(Location location) {

}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {

}

@Override
public void onProviderEnabled(String provider) {

}

@Override
public void onProviderDisabled(String provider) {

}