是否遇到过自己手机上有好的应用,但不知道怎么分享给好友的时候呢?作为一名程序员,遇到了这样简单的问题,肯定要想办法解决,经过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) {
-
- 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);
-
- 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() {
-
- 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() {
-
- return appList.size();
- }
-
- public Object getItem(int position) {
-
- return null;
- }
-
- public long getItemId(int position) {
-
- return 0;
- }
-
- public View getView(int position, View convertView, ViewGroup parent) {
-
- 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把所有已安装的用户应用列出来,但是没有做搜索,以后有时间肯定会加上,相信肯定会为你带来方便的。