如何在service中动态申请权限

C151151 2016-11-21 02:38:03
android6.0版本有的权限需要运行时申请,我新建的一个service,需要用到相机权限.
public IBinder onBind(Intent intent) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 2);

}
}
提示 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 2);中的this不能由service转成activity?求解!!
...全文
3669 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhucehaitao 2017-10-31
  • 打赏
  • 举报
回复
楼主,我跟你问题一样,你怎么解决的?
ta叫我小白 2016-12-06
  • 打赏
  • 举报
回复
回复不及时,望见谅~ service建立连接的时候,可以使用一个ServiceConnection的onServiceConnected方法来完成权限的申请:

public class MainActivity extends Activity {

	ServiceConnection conn = new ServiceConnection() {
		
		@Override
		public void onServiceDisconnected(ComponentName name) {
			// TODO Auto-generated method stub
		}
		
		@Override
		public void onServiceConnected(ComponentName name, IBinder service) {
			// 当service绑定成功时,会调用次方法,可以在此申请权限
			if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
	            ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, 2);
			}
		}
	};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Intent i = new Intent(this, MyService.class);
		bindService(i, conn, Context.BIND_AUTO_CREATE);
	}

}
至于想在service中获得一个activity的对象,可以尝试在你的activity中添加一个静态的activity成员,供service类调用:

public class MainActivity extends Activity {

	public static Activity mActivity;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		mActivity = this;
	}

}
xuezhiqiu 2016-11-24
  • 打赏
  • 举报
回复
引用 3 楼 bailichun19901111 的回复:
可以考虑向service传入一个activity的对象,或者在service中获取activity的一个对象,亦或者使用一个activity的静态对象。 另外,service建立连接的时候,可以使用一个ServiceConnection的onServiceConnected方法来完成权限的申请,即当服务建立连接时申请权限。 个人见解。
能讲的详细一点吗,谢谢
Arnold9009 2016-11-21
  • 打赏
  • 举报
回复
fragment类里好像有对应的接口,不需要activity类型的参数
ta叫我小白 2016-11-21
  • 打赏
  • 举报
回复
可以考虑向service传入一个activity的对象,或者在service中获取activity的一个对象,亦或者使用一个activity的静态对象。 另外,service建立连接的时候,可以使用一个ServiceConnection的onServiceConnected方法来完成权限的申请,即当服务建立连接时申请权限。 个人见解。
C151151 2016-11-21
  • 打赏
  • 举报
回复
引用 1 楼 bailichun19901111 的回复:
ActivityCompat.requestPermissions的第一个参数要求是Activity类型的,所以需要传入Activity或者其子类对象。传入Service对象会报错的。题中的this是指当前类的对象,即service对象,因此作为入参编译器会报错。
那么如何在service中动态申请权限呢?
ta叫我小白 2016-11-21
  • 打赏
  • 举报
回复
ActivityCompat.requestPermissions的第一个参数要求是Activity类型的,所以需要传入Activity或者其子类对象。传入Service对象会报错的。题中的this是指当前类的对象,即service对象,因此作为入参编译器会报错。

80,471

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧