【问题标题】:Problem pausing the app while getting permission from user在获得用户许可时暂停应用程序的问题
【发布时间】:2021-01-04 21:28:01
【问题描述】:

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

这就是我尝试的方式:

MainActivity:

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,这意味着在onCreate 方法中移动了第一个else 以及onRequestPermissionsResult 中的else。 为什么会这样?

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

【问题讨论】:

    标签: android android-permissions


    【解决方案1】:

    您无法暂停应用。你也不能在主线程上等待。您需要重新组织您的 Activity,这样您就不需要这样做了 - 创建一个空的或等待状态,直到该数据可用时才会显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 2015-05-01
      相关资源
      最近更新 更多