当前位置: 首页 > 知识库问答 >
问题:

在Marshmallow中请求权限组位置的正确方法是什么?

淳于玺
2023-03-14

我试图制作一个测试应用程序,这样我就可以使用LocationManager,但我甚至无法在运行时通过新的愚蠢的权限请求。我做错了什么,为什么他们让这变得如此混乱/复杂?

public class MainActivity extends AppCompatActivity {

    private static final int LOCATION_GROUP_PERMISSION_REQUEST = 1;
    private boolean locationPermissionGranted = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getLocationPermission();

        if(locationPermissionGranted) {
            LocationManager locationManager =
                    (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            String provider = LocationManager.GPS_PROVIDER;
            try {
                Location location = locationManager.getLastKnownLocation(provider);
                updateTextView(location);
            } catch(SecurityException e) {
                Log.e("PERMISSION_DENIED", e.getMessage());
            }
        }

        //registerReceiver(gpsReciever, new IntentFilter("android.location.PROVIDERS_CHANGED"));
    }

    private void updateTextView(Location location) {
        Double latitude = location.getLatitude();
        Double longitude = location.getLongitude();
        TextView view = (TextView) findViewById(R.id.textView);
        view.setText(getString(R.string.lat_long_string, latitude, longitude));
    }

    private void getLocationPermission() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            if (ContextCompat.checkSelfPermission(this, Manifest.permission_group.LOCATION)
                    != PackageManager.PERMISSION_GRANTED) {
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission_group.LOCATION},
                        LOCATION_GROUP_PERMISSION_REQUEST);
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           @NonNull String permissions[],
                                           @NonNull int[] grantResults) {
        // Make sure it's our original READ_CONTACTS request
        if (requestCode == LOCATION_GROUP_PERMISSION_REQUEST) {
            if (grantResults.length == 1 &&
                    grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                locationPermissionGranted = true;
            }
        }
    }
}

共有1个答案

段阳夏
2023-03-14

在Marshmallow中请求权限组位置的正确方法是什么?

您不需要。您在运行时请求权限,而不是权限组。从代码中删除所有引用权限组的内容(例如,Manifest.permission_group. LOCATION)。将其替换为引用权限的代码(例如,Manifest.permission.ACCESS_FINE_LOCATION)。

 类似资料:
  • 在Android Marshmallow中,当需要权限时,应该在运行时请求权限,而不是在安装应用程序时一次请求所有权限。然而,我似乎只能从活动中请求权限,这是一个问题,因为我的应用程序只包含服务。(你可能会问,这是为什么?该应用程序内置了一个Android Wear watch face,手机只需查找附近的照片即可发送到手表,无需任何活动。但它确实需要位置权限。) 那么,有没有办法向服务请求权限?

  • 问题内容: 我发现了一些在servlet中获取ip的方法。但我不知道哪一个是正确的,为什么。 1: 2: 3: 问题答案: 答案很复杂。 如果您的Servlet在反向代理或负载平衡器后面的Web服务器上运行,则可以将该Web代理配置为注入请求标头,该标头提供了请求来自的IP地址。不同的反向代理将注入不同的标头。请查阅您的(前端)服务器的文档。 如果您的客户端使用(转发)代理,则它 可能会 插入标头

  • 我做错了什么?

  • 问题内容: 我正在测试我的应用,即使清单中已经定义了,它也会被强制关闭。我在某处已经读到,如果我在运行时请求权限,则不会强制关闭您的应用程序。我也已经阅读了这个android文档,用于请求运行时权限。 因此,我知道我们可以请求一个如下所示的权限,该权限在android文档中有所提及。 上面的代码具有获取结果的回调方法。 我的问题是要向用户确切请求权限?我们应该在应用启动时使用请求权限还是应该在需要

  • 问题内容: 我正在尝试将log4j配置为使用,但我不断收到中继访问被拒绝的错误。在笔记本电脑上直接从共享托管环境执行代码时,出现此错误。 这是相关的配置: 如果改用,则会收到身份验证错误。我的主机位于DreamHost上,因此如果有人使用DreamHost电子邮件帐户设置了log4j,则可获赠积分。 问题答案: 原来我只是把属性都弄错了。应该:

  • 假设您有这样一种方法: 在整个应用程序中,如果要将文件保存到外部存储,可以执行以下操作。。。 这是一个简化的示例,所以不要讨论我关于阻止UI、正确处理异常等的情况。如果您不喜欢文件保存,您可以想象一个或或其他任何东西。关键是它是一个需要权限的操作,它返回一些值,并且在整个应用程序中使用。 在Android中 但是在新的Marshmallow(API 23)运行时权限模型中,在您可以将文件保存到外部