1

所以表盘是没有任何活动但只有服务的 Android Wear 应用程序。它是可见的和交互式的,但它是一种服务。如果应用想要访问位置或设置等任何内容,则需要在代码中请求相应的权限。尽管所有教程都这么说,但将其添加到清单文件中是无效的。也许它们过时的速度比 Android 上的变化要快。

ContextCompat.checkSelfPermission检查应用是否有一定权限的功能。这可以在我做任何事情之前调用。但是,如果它说我没有该权限,则必须提出请求。

ActivityCompat.requestPermissions通过对话框视图向用户请求权限的功能。不幸的是,这需要一个表盘没有的活动。

我已经看到有关此问题的另一个问题,但它没有有用的答案。答案包括外部库(我已经尝试过这两个库,但它们都不起作用),Java 中的代码示例也失败了,因为它扩展AppCompatActivity自我的 Android Studio 版本中不存在,否则没有代码。

网络没有为此提供任何解决方案,我找不到任何其他网络论坛,我可以在其中提出今天仍然活跃的此类问题。

我的应用程序是用 Kotlin 编写的,据说这是一种比 Java 更优越、更舒适的语言。我对这一切都很陌生,无法轻松地将 Java 示例转换为 Kotlin。除此之外,我根本找不到任何合适的代码示例。

我的理解是我需要打开一个可以请求许可的活动。不幸的是,Android 开发人员文档不是我以前从 Microsoft 获得的文档,并且不包括为 Wear 应用程序创建活动。而且它通常不提供任何示例来说明必须如何调用此方法。这些是文档中最有用的部分,而 Android 没有。所以我现在很困惑。Android 想要我做一些我不知道怎么可能的事情。

那怎么可能呢?我需要什么 Kotlin 代码来解决这个基本平台问题并从表盘服务请求权限?

4

1 回答 1

2

以下是我如何在表盘上执行此操作(根据您的使用情况进行清洁的示例):

public static class PermissionRequestActivity extends Activity {
private static int PERMISSIONS_CODE = 0;
String[] mPermissions;
int mRequestCode;

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    if (requestCode == mRequestCode) {
            for (int i = 0; i < permissions.length; i++) {
                String permission = permissions[i];
                int grantResult = grantResults[i];
                Log.d("PermissionRequestActivity", "" + permission + " " + (grantResult==PackageManager.PERMISSION_GRANTED?"granted":"revoked"));
            }
    }
    finish();
}

@Override
protected void onStart() {
    super.onStart();
    mPermissions = new String[1];
    mPermissions[0] = this.getIntent().getStringExtra("KEY_PERMISSIONS");
    mRequestCode = this.getIntent().getIntExtra("KEY_REQUEST_CODE", PERMISSIONS_CODE);

    ActivityCompat.requestPermissions(this, mPermissions, mRequestCode);
}}

然后从您的服务中,像这样启动它:

Intent myIntent = new Intent(getBaseContext(), PermissionRequestActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
myIntent.putExtra("KEY_PERMISSIONS", Manifest.permission.BODY_SENSORS);
startActivity(myIntent);
于 2018-04-10T16:00:55.693 回答