Java 位置服务可以工作,但一旦用户授予权限,则无法工作

Java 位置服务可以工作,但一旦用户授予权限,则无法工作,java,android,android-permissions,fusedlocationproviderapi,Java,Android,Android Permissions,Fusedlocationproviderapi,因此,我使用了一个教程,几乎是复制的,只有在用户离开应用程序并返回后授予应用程序工作权限的情况下,才进行了一点修改。如果他们打开应用程序并授予权限,则不会发生任何事情,如果他们拒绝权限,则不会发生任何事情 public class MainActivity extends AppCompatActivity { private ArrayList<Weather> weatherLsit; public static int REQUEST_PERMISSION=1; pri

因此,我使用了一个教程,几乎是复制的,只有在用户离开应用程序并返回后授予应用程序工作权限的情况下,才进行了一点修改。如果他们打开应用程序并授予权限,则不会发生任何事情,如果他们拒绝权限,则不会发生任何事情

    public class MainActivity extends AppCompatActivity {
private ArrayList<Weather> weatherLsit;
public static int REQUEST_PERMISSION=1;
private RecyclerView recyclerView;
private EditText zipCodeEditText;
LocationDataService locationDataService = new LocationDataService(MainActivity.this, this);
FusedLocationProviderClient fusedLocationProviderClient;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    recyclerView = findViewById(R.id.hourly_recycle_view);

    weatherLsit = new ArrayList<>();
    weatherLsit.add(new Weather(10, 6, R.drawable.cloudy_icon));
    weatherLsit.add(new Weather(15, 7, R.drawable.cloudy_icon));
    weatherLsit.add(new Weather(10, 8, R.drawable.cloudy_icon));
    weatherLsit.add(new Weather(60, 9, R.drawable.cloudy_icon));
    weatherLsit.add(new Weather(80, 10, R.drawable.cloudy_icon));
    weatherLsit.add(new Weather(20, 12, R.drawable.cloudy_icon));
    weatherLsit.add(new Weather(13, 12, R.drawable.cloudy_icon));
    setAdapter();
}

@Override
protected void onStart() {
    super.onStart();
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
        locationDataService.getLastLocation();
    } else {
        locationDataService.requestLocationPermission();
    }
}

private void setAdapter() {
    WeatherAdapter adapter = new WeatherAdapter(weatherLsit);
    RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getApplicationContext(), LinearLayoutManager.HORIZONTAL, false);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setAdapter(adapter);
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions,  int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_PERMISSION) {
        if (permissions.length >=0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            System.out.println("PERMISSON HAS BEEN GRANTED!");
            //do something permission is allowed here....

        } else {
            Toast.makeText(this, "Please allow the Permission", Toast.LENGTH_SHORT).show();
        }
    }

}
public类MainActivity扩展了AppCompatActivity{
私人ArrayList weatherLsit;
公共静态int请求\ u权限=1;
私人回收站;
私有EditText zipCodeEditText;
LocationDataService LocationDataService=新的LocationDataService(MainActivity.this,this);
FusedLocationProviderClient FusedLocationProviderClient;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
recyclerView=findViewById(R.id.hourly\u recycle\u view);
weatherLsit=新的ArrayList();
weatherLsit.add(新天气(10,6,R.drawable.cloudy_图标));
weatherLsit.add(新天气(15,7,右拉深,多云图标));
weatherLsit.add(新天气(10,8,右侧可绘制。多云图标));
weatherLsit.add(新天气(60,9,右侧可绘制。多云图标));
weatherLsit.add(新天气(80,10,R.drawable.cloudy_图标));
weatherLsit.add(新天气(20,12,右拉深,多云图标));
weatherLsit.add(新天气(13、12、右侧可绘制多云图标));
setAdapter();
}
@凌驾
受保护的void onStart(){
super.onStart();
if(ContextCompat.checkSelfPermission(此,Manifest.permission.ACCESS\u位置)==PackageManager.permission\u已授予){
locationDataService.getLastLocation();
}否则{
locationDataService.requestLocationPermission();
}
}
私有void setAdapter(){
WeatherAdapter=新的WeatherAdapter(weatherLsit);
RecyclerView.LayoutManager LayoutManager=新建LinearLayoutManager(getApplicationContext(),LinearLayoutManager.HORIZONTAL,false);
recyclerView.setLayoutManager(layoutManager);
setItemAnimator(新的DefaultItemAnimator());
recyclerView.setAdapter(适配器);
}
@凌驾
public void onRequestPermissionsResult(int-requestCode、字符串[]权限、int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
if(requestCode==请求权限){
如果(permissions.length>=0&&grantResults[0]==PackageManager.PERMISSION\u已授予){
System.out.println(“许可已授予!”);
//“做点什么”在这里是允许的。。。。
}否则{
Toast.makeText(这是“请允许许可”,Toast.LENGTH_SHORT.show();
}
}
}
}


由于某些原因,onRequestPermissionsResult没有被执行。我已经花了几个小时来解决这个问题,由于某些原因,我无法使它工作。

您可以尝试将权限检查放入
onCreate()
方法中

例如:

    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
        Log.i(TAG, "sdk < 28 Q");
        if (ActivityCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            String[] strings =
                    {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
            ActivityCompat.requestPermissions((Activity)context, strings, 1);
        }
    } else {
        if (ActivityCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(context,
                "android.permission.ACCESS_BACKGROUND_LOCATION") != PackageManager.PERMISSION_GRANTED) {
            String[] strings = {Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    "android.permission.ACCESS_BACKGROUND_LOCATION"};
            ActivityCompat.requestPermissions((Activity)context, strings, 2);
        }
    }

并将权限代码更改为以下内容:

    if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
        Log.i(TAG, "sdk < 28 Q");
        if (ActivityCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
            String[] strings =
                    {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
            ActivityCompat.requestPermissions((Activity)context, strings, 1);
        }
    } else {
        if (ActivityCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(context,
                Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED
                && ActivityCompat.checkSelfPermission(context,
                "android.permission.ACCESS_BACKGROUND_LOCATION") != PackageManager.PERMISSION_GRANTED) {
            String[] strings = {Manifest.permission.ACCESS_FINE_LOCATION,
                    Manifest.permission.ACCESS_COARSE_LOCATION,
                    "android.permission.ACCESS_BACKGROUND_LOCATION"};
            ActivityCompat.requestPermissions((Activity)context, strings, 2);
        }
    }