Android 程序中安装其它软件包

openkk 13年前

1. 介绍
应用程序中有时需要调用其它软件,但有时用户没有安装需要调用的软件,为方便用户使用,以下例程实现了半自动化的引导用户安装。

1)       调用的几种可能性

a)        被调用的软件包已经存在

b)       用户设备存在应用市场程序(如google market, 掌上应用汇等)

c)       软件安装是否成功(在市场中能否找到软件包,调用市场软件时发生异常)

2. 例程

1)       功能
判断文件管理器是否存在,如果不存在,则引导用户从应用市场安装

2)       关键字
应用中,安装,其它软件,apk

3)       可从此处下载可独立运行的代码
http://download.csdn.net/detail/xieyan0811/4117459

4)       核心代码及说明

package com.demo.apk;         import android.app.Activity;    import android.app.AlertDialog;    import android.os.Bundle;    import android.content.Intent;    import android.view.View;    import android.widget.Button;    import android.widget.Toast;    import android.net.Uri;    import android.util.Log;    import android.content.pm.PackageManager;    import android.content.pm.PackageInfo;    import android.content.pm.ResolveInfo;    import android.content.DialogInterface;    import java.util.List;    import java.util.ArrayList;         public class MyApkActivity extends Activity {            private String TAG ="demo";            private static finalString APK_NAME = "lysesoft.andexplorer";            private static finalint REQUEST_INSTALL = 1;                 @Override            public voidonCreate(Bundle savedInstanceState) {                     super.onCreate(savedInstanceState);                     Button button= new Button(this);                     button.setText("test" + APK_NAME);                     button.setOnClickListener(newView.OnClickListener() {                               publicvoid onClick(View v) {                                        if(apkExists())  // 软件包中否存在                                                 showExists();              // 提示用户已存在                                        elseif (!hasMarket())                   // 是否有手机市场软件                                                 showWithoutMarket();                // 提示用户无手机市场可用                                        else                                                 runInstall();      // 安装软件                               }                     });                     setContentView(button);            }                 private booleanapkExists() {                     PackageManagerpManager = getPackageManager();                     List<PackageInfo>packageInfoList = pManager.getInstalledPackages(0);                     for (int i =0; i < packageInfoList.size(); i++) {                               PackageInfopkg = packageInfoList.get(i);                               Log.d(TAG,"pkg name " + pkg.packageName);                               if(pkg.packageName.equals(APK_NAME))                                        returntrue;                     }                     return false;            }                 public booleanhasMarket() {                     List<ResolveInfo>mApps = new ArrayList<ResolveInfo>();                     Uri uri =Uri.parse("market://search?q=pname:" + APK_NAME);                     Intent intent= new Intent(Intent.ACTION_VIEW, uri);                     PackageManagerpManager = getPackageManager();                     mApps =pManager.queryIntentActivities(intent,                                        PackageManager.COMPONENT_ENABLED_STATE_DEFAULT);                     Log.d(TAG,"market count " + mApps.size());                     if(mApps.size() > 0)                               returntrue;                     else                               returnfalse;            }                 private voidshowWithoutMarket() {                     AlertDialog.Builderdialog = new AlertDialog.Builder(this);                     dialog.setMessage("withoutmarket on smartphone");                     dialog.setNegativeButton(android.R.string.cancel,null);                     dialog.show();            }                 private voidshowExists() {                     AlertDialog.Builderdialog = new AlertDialog.Builder(this);                     dialog.setMessage("apkalready exists");                     dialog.setNegativeButton(android.R.string.cancel,null);                     dialog.show();            }                 private voidrunInstall() {                     Uri uri = Uri.parse("market://search?q=pname:"+ APK_NAME);                     Intent it =new Intent(Intent.ACTION_VIEW, uri);                     startActivityForResult(it,REQUEST_INSTALL);            }                 protected voidonActivityResult(int requestCode, int resultCode,                               Intentintent) {  // 提示用户如果在市场上找不到软件的解决方法                     if(requestCode == REQUEST_INSTALL) {                               Log.d(TAG,"resultCode " + resultCode);                               Toast.makeText(MyApkActivity.this,                                                 "ifapk can't found in market, please download by PC",                                                 Toast.LENGTH_LONG).show();                     }            }    };

转自:http://blog.csdn.net/xieyan0811/article/details/7325598