首页 > 解决方案 > 如何在 Java 中的 App Launch 中预先请求位置权限

问题描述

我正在尝试在应用启动时预先请求设备许可,但无济于事。我没有使用任何库,因为我正在关注本文档(https://developer.android.com/training/permissions/requesting)并且我打算使用它,我做错了什么?

这是我的清单

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

这是我在 MainActivity 上尝试过的,我的 minSdkVersion 是 26

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.PersistableBundle;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private static final String TAG = MainActivity.class.getSimpleName();
    private static final int REQUEST_CODE = 100;
    private Activity mActivity;
    private Context mContext;

String[] appPermissions = {
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION
};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mActivity = MainActivity.this;
        mContext = getApplicationContext();
        requestAppPermissions();
    }
    private void requestAppPermissions() {
    try {
        if(ContextCompat.checkSelfPermission(
                mActivity,Manifest.permission.ACCESS_FINE_LOCATION
        )+ContextCompat.checkSelfPermission(
                mActivity,Manifest.permission.ACCESS_COARSE_LOCATION
        )== PackageManager.PERMISSION_GRANTED
        ){
            ///perform action
            Toast.makeText(mContext,"Permissions already granted",Toast.LENGTH_SHORT).show();

        }else {
            if (
                //Do something when permission is not granted
                    ActivityCompat.shouldShowRequestPermissionRationale(
                            mActivity, Manifest.permission.ACCESS_FINE_LOCATION
                    ) || ActivityCompat.shouldShowRequestPermissionRationale(
                            mActivity, Manifest.permission.ACCESS_COARSE_LOCATION
                    )
            ) {
                AlertDialog.Builder builder = new AlertDialog.Builder(mActivity);
                builder.setMessage("Location Permission is required by App.");
                builder.setTitle("Please grant location Permission");
                builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        ActivityCompat.requestPermissions(
                                mActivity, new String[]{
                                        Manifest.permission.ACCESS_FINE_LOCATION,
                                        Manifest.permission.ACCESS_COARSE_LOCATION
                                },
                                REQUEST_CODE
                        );
                    }
                });
                builder.setNeutralButton("Cancel", null);
                AlertDialog dialog = builder.create();
                dialog.show();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case REQUEST_CODE:{
                if(
                        (
                                grantResults.length>0)&&(
                                grantResults[0]+grantResults[1]
                                ==PackageManager.PERMISSION_GRANTED
                                )
                ){
                    Toast.makeText(mContext,"Permissions granted.",Toast.LENGTH_SHORT).show();

                }else{
                    Toast.makeText(mContext,"Permissions Denied.",Toast.LENGTH_SHORT).show();

                }
                return;
            }
        }
    }
}

标签: javaandroid

解决方案


推荐阅读