Java 等待用户权限继续

Java 等待用户权限继续,java,android,Java,Android,我想让我的应用等待用户授予权限,然后再继续应用。我搜索了关于它的其他线程,发现常见的方法是使用onRequestPermissionResult。现在我完全不知道如何设置它:除了请求本身之外,我是否只将程序代码放入onRequestPermissionResult中,或者我需要如何设置它,这样用户就可以请求它,然后应用程序继续运行 这是我的代码: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (ContextCom

我想让我的应用等待用户授予权限,然后再继续应用。我搜索了关于它的其他线程,发现常见的方法是使用
onRequestPermissionResult
。现在我完全不知道如何设置它:除了请求本身之外,我是否只将程序代码放入
onRequestPermissionResult
中,或者我需要如何设置它,这样用户就可以请求它,然后应用程序继续运行

这是我的代码:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

   if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
           != PackageManager.PERMISSION_GRANTED) {

       ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 123);
   } else {
       progressBar.setVisibility(View.VISIBLE);
       GPSTracker gt = new GPSTracker(getActivity().getApplicationContext());
       Location location = gt.getLocation();

       if (location == null) {
           Toast.makeText(getActivity(), "No location found.",
                   Toast.LENGTH_LONG).show();
       } else {
           lat = location.getLatitude();
           lon = location.getLongitude();
       }
       new GetContacts().execute();
   }
} else {
  progressBar.setVisibility(View.VISIBLE);
  GPSTracker gt = new GPSTracker(getActivity().getApplicationContext());
  Location location = gt.getLocation();

  if (location == null) {
     Toast.makeText(getActivity(), "No location found.",
              Toast.LENGTH_LONG).show();
  } else {
      lat = location.getLatitude();
      lon = location.getLongitude();
  }
    new GetContacts().execute();
}
结果是:

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 123: {
            // If request is cancelled, the result arrays are empty
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                progressBar.setVisibility(View.VISIBLE);
                GPSTracker gt = new GPSTracker(getActivity().getApplicationContext());
                Location location = gt.getLocation();

                if (location == null) {
                    Toast.makeText(getActivity(), "No location found.",
                            Toast.LENGTH_LONG).show();
                } else {
                    lat = location.getLatitude();
                    lon = location.getLongitude();
                }
                new GetContacts().execute();

            } else {
                //Toast
            }
            return;
        }
    }
}
@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 123: {
            // If request is cancelled, the result arrays are empty
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                //GPS method
            } else {
                // Toast for user
            }
            return;
        }
    }
}

就像评论中提到的Martin Zeitler一样,您必须准备棉花糖上面和下面的API,例如:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

    if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION)
     != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(getActivity(), new String[] {Manifest.permission.ACCESS_FINE_LOCATION}, 123);
    } else {

        //GPS method
    }
} else {

    //GPS method
}
正如你在onRequestResult的问题中提到的:

@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 123: {
            // If request is cancelled, the result arrays are empty
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                progressBar.setVisibility(View.VISIBLE);
                GPSTracker gt = new GPSTracker(getActivity().getApplicationContext());
                Location location = gt.getLocation();

                if (location == null) {
                    Toast.makeText(getActivity(), "No location found.",
                            Toast.LENGTH_LONG).show();
                } else {
                    lat = location.getLatitude();
                    lon = location.getLongitude();
                }
                new GetContacts().execute();

            } else {
                //Toast
            }
            return;
        }
    }
}
@Override
public void onRequestPermissionsResult(int requestCode,
                                       String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 123: {
            // If request is cancelled, the result arrays are empty
            if (grantResults.length > 0
                    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                //GPS method
            } else {
                // Toast for user
            }
            return;
        }
    }
}

重新构造该方法,以便
GPSTracker gt…
将驻留在它自己的方法中,该方法可以从其他两个位置调用;也可以考虑<代码> API 23 <代码>在运行时没有支持请求的权限。哦,好吧,它是如何用API 23解决的,那么如果你知道的话,权限被添加到清单中,当用户下载应用程序时,他/她将被要求应用程序安装应用程序的所有权限。所以在运行时没有权限。以上所有权限都必须在清单中声明。我想这样做对于较新版本来说是不可能的,所以有必要在运行时检查它们?不要提:)。快乐编码并将知识传递给他人:)我一定会的!:)