【framework】framework中为systemserver添加权限

在移植Android 6.0时发现framework服务在读写SDCard时需要权限。问题源于system_server进程缺少AID_SDCARD_RW(1015组)权限。解决方案是修改ZygoteInit.java,启动system_server时添加--setgroups参数以包含1015用户组。
摘要由CSDN通过智能技术生成

      之前以为在framework中不需要申请权限就可以直接使用,直到最近移植android6.0时,发现原来4.4上的代码移植到6.0上后无法正常使用,排查原因发现是在读写sdcard时因为没有读写权限导致出错,这才直到原来framework中的服务也是需要配置权限相关的东西的,只是方法和app中配置的方法不一样。如下记录该问题解决的方法:

1、测试代码

我在system server中自定义的服务中加入一段读写外置存储的测试代码,代码实现的功能非常简单,主要用三个方法构成,一个用于检测外置存储设备的挂载状态,一个用于读取显示外置存储中的文件列表,第三个方法用于向外置存储设备中创建一个测试文件,创建前如果存在就先删除。

	private final static String[] sStorageArray = { "/mnt/extsd",
		"/mnt/extsd2", "/mnt/usbhost/Storage01", "/mnt/usbhost/Storage02",
		"/mnt/usbhost/Storage03" };
	
	@RequiresPermission(anyOf = {"android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"})
	private static void checkStorageState() {
		String state = Environment.getExtsdStorageState();
		Log.d(TAG, "getExtsdStorageState=" + state);
		state = Environment.getExtsd2StorageState();
		Log.d(TAG, "getExtsd2StorageState=" + state);
		state = Environment.getUsbStorageState();
		Log.d(TAG, "getUsbStorageState=" + state);
		state = Environment.getExtsd2StorageState();
		Log.d(TAG, "getExtsd2StorageState=" + state);
	}

	@RequiresPermission(anyOf = {"android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"})
	private static void listFile(final String home) {
		Log.d(TAG, "Home ="+home);
		File f = new File(home);
		if (null != f && f.exists()) {
			Log.d(TAG, "Home " + home + "  is avaiable!");
			File list[] = f.listFiles();
			if (null != list && 0 < list.length) {
				Log.d(TAG, "File list is not empty.");
				for (File tf : list) {
					if (null != tf) {
						Log.d(TAG, "File name=" + tf.getName());
					}
				}
			}
			else {
				Log.e(TAG, "File list is empty.");
			}
		} else {
			Log.e(TAG, "Home " + home + " is not avaiable.");
		}
	}
	
	@RequiresPermission(anyOf = {"android.permission.READ_EXTERNAL_STORAGE", "android.permission.WRITE_EXTERNAL_STORAGE"})
	private static void writeFile(final String home) {
		Log.d(TAG, "Home ="+home);
		File f = new File(home);
		if (null != f && f.exists()) {
			Log.d(TAG, "Home " + home + "  is avaiable!");
			fin
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值