显示允许应用访问设备的位置

时间:2017-02-04 10:53:17

标签: android permissions location android-gps

我是Android编程的新手,我需要显示警告,以便用户在点击允许按钮时自动授予我的应用权限。

喜欢这款应用

enter image description here

但实际上我的代码会发出一条消息,只是将用户带到设置中,这样他/她就可以手动更改它,而不是每个人都知道如何手动更改

enter image description here

我如何获得第一个警报,以便应用程序自动获得权限,而不是我当前的方式,只是将用户移动到设置页面,他们必须手动执行

这是我的代码

  public void showSettingsAlert() {
        AlertDialog.Builder alertDialog = new AlertDialog.Builder(_activity);
        alertDialog.setTitle("GPS Settings");
        alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu ?");

        alertDialog.setPositiveButton("Settings",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(
                                Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                        _activity.startActivity(intent);
                    }
                });

        alertDialog.setNegativeButton("Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.cancel();
                    }
                });

        alertDialog.show();
    }

3 个答案:

答案 0 :(得分:2)

允许您的应用访问设备的位置(第一次屏幕截图)与启用GPS(第二次屏幕截图)不同。您实际上需要两者:首先检查您是否有其他答案建议的权限,然后检查GPS是否已启用,如您所知。

如果您想以编程方式启用GPS,则需要使用"设置API"。检查this answer如何实施它。

答案 1 :(得分:1)

您的运行时权限只需通过此链接获取参考click here

还要检查此click here

为了保护用户,他们必须在运行时获得授权,以便用户知道它是否与他的行为有关。

要做到这一点:

export async function getPlaces(ctx, next) {
    const { error, data } = await PlaceModel.getPlaces(ctx.query);
    console.log(error, data);
    if (error) {
        return ctx.throw(422, error);
    }
    ctx.body = data;
}

它将显示一个DialogBox,用户可以在其中选择是否自动调整您的应用以使用位置。

然后使用此功能让用户回答:

ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);

如果用户接受一次,那么您的应用程序将记住它,您将不再需要发送此DialogBox。请注意,如果他决定,用户可以稍后禁用它。然后在请求位置之前,您必须测试是否仍然授予了权限:

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

            } else {
                // permission denied, boo! Disable the
                // functionality that depends on this permission.
            }
        return;
        }
            // other 'case' lines to check for other
            // permissions this app might request
    }
}

答案 2 :(得分:1)

您必须向用户请求权限,如下所示

// Here, thisActivity is the current activity
if (ContextCompat.checkSelfPermission(thisActivity,
            Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {

// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,
        Manifest.permission.READ_CONTACTS)) {

    // Show an explanation to the user *asynchronously* -- don't block
    // this thread waiting for the user's response! After the user
    // sees the explanation, try again to request the permission.

} else {

    // No explanation needed, we can request the permission.

    ActivityCompat.requestPermissions(thisActivity,
            new String[]{Manifest.permission.READ_CONTACTS},
            MY_PERMISSIONS_REQUEST_READ_CONTACTS);

    // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
    // app-defined int constant. The callback method gets the
    // result of the request.
}
}

以下是参考link