首页 > 解决方案 > 在获得用户许可时暂停应用程序的问题

问题描述

我想获取位置数据,但首先我必须获得用户的许可。所以我想在用户授予或拒绝权限时暂停应用程序

这就是我尝试这样做的方式:

主要活动:

public class MainActivity extends AppCompatActivity {

    private static final long LOCATION_REFRESH_TIME = 15000;
    private static final float LOCATION_REFRESH_DISTANCE = 500;
    public static final int LOCATION_PERMISSION_REQUEST_CODE = 1;
    public Boolean locationPermissionResults=null;

    double longitudeNetwork;
    double latitudeNetwork;
    TextView locationText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        locationText=findViewById(R.id.locationtext);

        //getting the permission if its not granted
        if(ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_FINE_LOCATION)
                != PackageManager.PERMISSION_GRANTED
                || ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.ACCESS_COARSE_LOCATION)
                != PackageManager.PERMISSION_GRANTED) {
                    locationText.setText("give permission1");
                    ActivityCompat.requestPermissions(MainActivity.this, new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION,
                            android.Manifest.permission.ACCESS_COARSE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE);
        //resume if granted
        }
        else{
            locationManager();
        }




    }

    private final LocationListener mLocationListenerNetwork = new LocationListener() {
        @Override
        public void onLocationChanged(final Location location) {

            latitudeNetwork = location.getLatitude();
            longitudeNetwork = location.getLongitude();
            locationText.setText(Double.toString(longitudeNetwork) + "//" + Double.toString(latitudeNetwork));
        }
    };

    @SuppressLint("MissingPermission")
    public void locationManager(){
        LocationManager locationManagerNetwork = (LocationManager) getSystemService(LOCATION_SERVICE);
        locationManagerNetwork.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, LOCATION_REFRESH_TIME,
                LOCATION_REFRESH_DISTANCE, mLocationListenerNetwork);
    }
    @Override
    public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
        switch (requestCode) {
            case LOCATION_PERMISSION_REQUEST_CODE: {
                if (permissions[0].equals(Manifest.permission.ACCESS_COARSE_LOCATION)) {
                    if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                        locationManager();

                    } else{
                        locationText.setText("give permission2");
                    }
                }
            }
        }
    }

}

我在获得许可和处理结果方面遇到问题。当用户拒绝或授予权限请求时,locationText显示give permission1这意味着移过 first elseinonCreate方法和elsein onRequestPermissionsResult。为什么会这样?

注意:在onRequestPermissionsResult我只检查请求的权限之一,onCreate因为如果其中一个被授予,另一个也被授予。这可能是问题吗?

标签: androidandroid-permissions

解决方案


您不能暂停应用程序。你也不能在主线程上等待。你需要重新组织你的活动,这样你就不需要这样做了——创建一个空的或等待的状态,直到数据可用。


推荐阅读