Android之共享已安装的apk应用

          是否遇到过自己手机上有好的应用,但不知道怎么分享给好友的时候呢?作为一名程序员,遇到了这样简单的问题,肯定要想办法解决,经过google和百度,查得android上所有已安装的应用都会做一个备份,分别存放在三个地方:

1、系统签名的软件:/system/app

2、安装到内存上的非系统签名软件:/data/app

3、安装到sd卡上的非系统签名软件:/mnt/asec/包名-数字/pkg.apk

我们可以使用re浏览器查看和分享这些apk,本人已确认过,这些应用都是可用的,但是这样子相当麻烦,因为你自己必须记得这三个位置,以及这三个位置对应的存放的应用,否则每次都要把三个文件夹浏览一次,多麻烦呀,程序就是为了让人们偷懒而生的,因此废话不多说,下面贴出我自己写的可列出所有安装应用并能够通过蓝牙分享的代码:

public class MainActivity extends Activity {

	GridView mGridView = null;
	List<ResolveInfo> mAllApps = new ArrayList<ResolveInfo>();
	List<PackageInfo>mAllPackages=new ArrayList<PackageInfo>();
	PackageManager packageManager = null;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		showView();
	}

	public void showView() {
		packageManager = getPackageManager();
		mGridView = (GridView) this.findViewById(R.id.gridView1);
		setMyAllApps();

		mGridView.setAdapter(new MyAdapter(mAllApps, this));
		mGridView.setNumColumns(4);
		mGridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

			public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
					int arg2, long arg3) {
				// TODO Auto-generated method stub
				ResolveInfo resolveInfo=mAllApps.get(arg2);
				String packageName=resolveInfo.activityInfo.packageName;
				for(Iterator<PackageInfo>iterator=mAllPackages.iterator();iterator.hasNext();){
					PackageInfo packageInfo=iterator.next();
					if(packageInfo.applicationInfo.packageName.equals(packageName)){
						Log.i("six grade", "source dir:"+packageInfo.applicationInfo.sourceDir);
						File sourceFile=new File(packageInfo.applicationInfo.sourceDir);
						//调用android系统的分享窗口
						Intent intent=new Intent();
						intent.setAction(Intent.ACTION_SEND);
						intent.setType("*/*");
						intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(sourceFile));
						startActivity(intent);
					}
				}
				return true;
			}
		});
	}

	public void setMyAllApps() {
		// 查找所有首先显示的activity
		Intent intent = new Intent(Intent.ACTION_MAIN, null);
		intent.addCategory(Intent.CATEGORY_LAUNCHER);
		mAllApps = packageManager.queryIntentActivities(intent, 0);
		mAllPackages=packageManager.getInstalledPackages(0);
		// 按照名字排序
		Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(
				packageManager));
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	class MyAdapter extends BaseAdapter {

		List<ResolveInfo> appList;
		Context mContext;

		public MyAdapter(List<ResolveInfo> appList, Context context) {
			this.appList = appList;
			mContext = context;
		}

		public int getCount() {
			// TODO Auto-generated method stub
			return appList.size();
		}

		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}

		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return 0;
		}

		public View getView(int position, View convertView, ViewGroup parent) {
			// TODO Auto-generated method stub
			convertView = LayoutInflater.from(mContext).inflate(
					R.layout.application, null);
			ImageView imageView = (ImageView) convertView
					.findViewById(R.id.imageView1);
			TextView textView = (TextView) convertView
					.findViewById(R.id.textView1);
			ResolveInfo resolveInfo = appList.get(position);
			textView.setText(resolveInfo.loadLabel(packageManager));
			imageView.setBackgroundColor(Color.TRANSPARENT);
			Bitmap iconBitmap = ImageUtils.drawableToBitmap(resolveInfo
					.loadIcon(packageManager));
			imageView.setImageBitmap(ImageUtils.getRoundedCornerBitmap(
					ImageUtils.zoomBitmap(iconBitmap, 60, 60), 10));
			return convertView;
		}

	}
}

下面是程序截图

我使用的是gridview把所有已安装的用户应用列出来,但是没有做搜索,以后有时间肯定会加上,相信肯定会为你带来方便的。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏听雨堂

存储状态数据

保存偏好         @Override         protected void onPause(){                 super.o...

2389
来自专栏cloudskyme

android使用Activity

第一个例子,显示网址 首先创建工程 ? 按照提示填入 我使用的是2.3版本,所以Min SDK Version填10 修改/res/layout/下main....

3903
来自专栏Java后端生活

购物APP项目开发(1)——菜单开发

1554
来自专栏项勇

笔记43 | Android加载器Adapter的深入学习篇(二)

1746
来自专栏向治洪

仿微信语音聊天

如上图,是常见的仿微信的聊天程序,实现的效果如上图所示,由于项目太大,本文只讲录音部分。本项目示例代码:https://github.com/xiangzhih...

85710
来自专栏ASP.NET MVC5 后台权限管理系统

.Net 转战 Android 4.4 日常笔记(10)--PullToRefresh下拉刷新使用

这里我们使用一个开源的库叫:PullToRefresh 开源地址:https://github.com/chenyoca/pull-to-refresh 下载地...

2028
来自专栏移动开发

图片库的封装

关于图片库的封装相关的文章早已经看到过.图片库的封装可以使得调用者不知道,底层的具体实现,即使我们换了图片加载库,上层处的代码感知不到无需修改.

1752
来自专栏Hongten

android开发_Intent初级学习

前面说到用Intent来拨打电话和发送短信,主要是介绍了Intent的一些简单方法,这里Intent启动了另一个Activity,在之前的内容都是在一个Acti...

832
来自专栏Android干货

Android项目实战(三):实现第一次进入软件的引导页

3345
来自专栏用户2442861的专栏

android 多条件筛选菜单效果

http://blog.csdn.net/u011733020/article/details/51002746

9672

扫码关注云+社区

领取腾讯云代金券