android 服务 权限不够,wear os - 如何从Android Marshm中的服务请求权限

wear os - 如何从Android Marshm中的服务请求权限

在Android Marshmallow中,应在运行时在需要时请求权限,而不是在安装应用程序时立即请求权限。 但是,我似乎只能从Activity请求权限,这是一个问题,因为我的应用程序只包含服务。 (为什么会这样,你可能会问?该应用程序内部捆绑了一个Android Wear手表,所有手机都会查看附近的照片以发送到手表 - 无需任何活动。但它确实需要位置权限。)

那么,有没有办法从服务请求权限? 或者以某种方式强制在安装时授予权限,就像过去一样?

6个解决方案

40 votes

requestPermission()只能从Activity而不是Service调用(与checkPermission()不同,只需要PackageManager)。 所以你需要做一些额外的工作来解决这个问题; 你需要在你的应用程序中提供Activity,例如,你的Service可以检查它需要的权限,如果它们尚未被授予,它可以创建一个通知,并且可以通过描述性的短消息告知用户为什么 有通知,当他们点击通知等时需要发生什么。

Ali Naddaf answered 2019-08-08T11:15:56Z

14 votes

我同意,这对于服务非常麻烦,我认为您应该在Android Developer Preview页面上报告此问题。

目前,我认为最好的解决方案是检查服务权限,并在缺少权限时显示通知。 更好的是,创建DialogActivity以在用户按下通知时请求权限。

Derek Fung answered 2019-08-08T11:16:29Z

7 votes

看看PermissionEverywhere库。 它允许您从任何上下文请求权限。

它会创建一个通知,点击该通知,打开一个要求许可的活动。

来自library的github页面的示例代码: -

@Override

protected Boolean doInBackground(Void... params) {

PermissionResponse response = PermissionEverywhere.getPermission(getApplicationContext(),

new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},

REQ_CODE,

"Notification title",

"This app needs a write permission",

R.mipmap.ic_launcher)

.call();

//waits..

boolean isGranted = response.isGranted();

if(isGranted){ //changed from isGrante to isGranted

// Do stuff

}

}

Heisenberg answered 2019-08-08T11:17:09Z

2 votes

有一个非常简单的库允许这样做。 您可以根据应用程序是在前台还是后台从任何地方(甚至是服务)检查权限,它可以显示正常对话框或生成要求权限的通知。 代码非常容易理解,而且使用起来非常简单。

试一试:Android Permissions

Nishkarsh answered 2019-08-08T11:17:43Z

1 votes

@SuppressLint("NewApi")

public void checkPerm()

{

locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

if ( checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ) {

return;

}

locationManager.requestLocationUpdates( LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() {....}

}

Thamsanqa Mahlaola answered 2019-08-08T11:18:01Z

-2 votes

您可以使用ResultReceiver创建用户答案的接收者,然后通过通知PendingIntent将其作为回调传递给活动。参考

Farrux Bahodirov answered 2019-08-08T11:18:28Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值