Android上发送已安装软件原理及其实现

作者:Chilau 发布于:2014-1-31 0:51 分类:android

某些手机(比如华为)自带的文件管理器内可以发送已安装的软件,通过蓝牙/彩信或者其它支持的渠道,也可以将安装包保存到SD卡内。经过试验发现,不用root,普通权限的应用也可以实现这一点。

device-2014-01-30-235852.png

 

原来我也以为只有system权限的应用才可以访问存有安装包的/data/app目录,其实不然,从图中可以看到,权限为744,也就是说system可以读写,其它的只有读取权限。

不说其他的了,上主要代码:

	                    File f = new File(tempInfo.applicationInfo.sourceDir);
	                    Intent intent1 = new Intent();
	                    intent1.setAction(Intent.ACTION_SEND);
	                    intent1.setType("*/*");
	                    intent1.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(f));
	                    startActivity(intent1);


其中tempinfo是从List<packageinfo>中来的。applicationInfo.sourceDir就代表了应用的所在路径。之后只用intent传入路径就行了,系统会自动处理。

效果:

20140131005200.jpg

可以看到,其中有蓝牙发送,上传到dropbox,通过彩信发送的选项。

其实仔细想想,蓝牙是系统应用,应该有system权限,具体可以看/data/misc/bluetooth的权限和所有者。

有兴趣的朋友可以留言要整个程序的源码。



« android不调用JNI解析挂载点对应设备 | busybox 中无mkfs.ext4无法创建ext4格式文件系统»

发表评论: