Android 程序中安裝其它軟件包
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
本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!