Android 程序中安裝其它軟件包

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