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