<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-1  評論-68  文章-98  trackbacks-0

    作者:徐建祥(netpirate@gmail.com)
    日期:2010/07/28
    網(wǎng)址:http://www.anymobile.org

     

    安裝程序:軟件從無到有。

    卸載程序:軟件從有到無。

    更新程序:軟件的覆蓋安裝,可以保留原版本的數(shù)據(jù),提升軟件版本。

     

    安裝程序的方法:

     

    1、  通過Intent機制,調(diào)出系統(tǒng)安裝應(yīng)用,重新安裝應(yīng)用的話,會保留原應(yīng)用的數(shù)據(jù)。

     

    String fileName = Environment.getExternalStorageDirectory() + apkName;

    Uri uri = Uri.fromFile(new File(fileName));

    Intent intent = new Intent(Intent.ACTION_VIEW);

    intent.setDataAndType(Uri, application/vnd.android.package-archive");

    startActivity(intent);

     

    2、  直接調(diào)用安裝接口。

     

    Uri mPackageURI = Uri.fromFile(new File(Environment.getExternalStorageDirectory() + apkName));

    int installFlags = 0;

    PackageManager pm = getPackageManager();

    try

    {

        PackageInfo pi = pm.getPackageInfo(packageName,

        PackageManager.GET_UNINSTALLED_PACKAGES);

        if(pi != null)

        {

            installFlags |= PackageManager.REPLACE_EXISTING_PACKAGE;

        }

    }

    catch (NameNotFoundException e)

    {}

    PackageInstallObserver observer = new PackageInstallObserver();

    pm.installPackage(mPackageURI, observer, installFlags);

     

    安裝應(yīng)用權(quán)限:android.permission.INSTALL_PACKAGES

     

    系統(tǒng)應(yīng)用(安裝在/system/app下面)可以采用該方式,第三方應(yīng)用無法申請安裝卸載權(quán)限。

    java.lang.SecurityException: Neither user 10039 nor current process has android.permission.INSTALL_PACKAGES.

     

    3、  執(zhí)行install命令。

     

    install –r 更新安裝,默認(rèn)新安裝;如果不附上-r參數(shù),則會清楚原應(yīng)用的數(shù)據(jù),版本一致則無法安裝。

    1am start …

    2Runtime.exec(String[] args)

    3Class<?> execClass = Class.forName("android.os.Exec");

     

    4、  執(zhí)行cp / adb push命令。

     

    由系統(tǒng)檢測到應(yīng)用程序有更新,自動完成重新安裝。

     

    5、  通過第三方軟件實現(xiàn)。

     

    MarketEOEeTrackDog均采用第一種方法實現(xiàn)更新。

    優(yōu)點:由系統(tǒng)核心應(yīng)用程序控制安裝程序;

    缺點:無法控制安裝過程;安裝完成后,也無法立刻啟動應(yīng)用,需要用戶確認(rèn);無法擴展。

     

    實例:Market查找安裝程序

    Intent intent =

    new Intent(Intent.ACTION_VIEW, Uri.parse("market://search?q=pname:your.app.id"));

    startActivity(intent);

     

    卸載程序的方法:

     

    1、  通過Intent機制,調(diào)出系統(tǒng)卸載應(yīng)用。

    Uri packageURI = Uri.parse("package: your.app.id");

    Intent intent = new Intent(Intent.ACTION_DELETE);

    startActivity(intent);

     

    2、  直接調(diào)用卸載接口。

     

    PackageInstallObserver observer = new PackageInstallObserver();

    pm.installPackage(mPackageURI, observer, installFlags);

     

    卸載應(yīng)用權(quán)限:android.permission.DELETE_PACKAGES

     

    3、  運行rm apk安裝文件,由系統(tǒng)檢測后調(diào)用卸載應(yīng)用。

     

    備注說明:

    Android系統(tǒng)的應(yīng)用安裝,在系統(tǒng)設(shè)置里面有一項,是否安裝未知源,所在在軟件更新的時候,需要檢測這個選項,如果打鉤,則只允許安裝Market源提供的安裝程序,如果沒有打鉤的話,系統(tǒng)安裝應(yīng)用時會提示用戶設(shè)置,如果選擇設(shè)置,設(shè)置好后,無法返回安裝界面;如果選擇取消,則推出安裝程序。所以,如果是更新的話,一定要在下載之前就檢測許可安裝源的設(shè)置,或者在下載前檢測是否已經(jīng)下載過新的安裝程序,避免重復(fù)下載安裝程序。

     

    相關(guān)的代碼如下:

    1.          int result = Settings.Secure.getInt(getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS, 0);      

    2.          if (result == 0) {      

    3.          // show some dialog here      

    4.          // ...      

    5.          // and may be show application settings dialog manually      

    6.          Intent intent = new Intent();      

    7.          intent.setAction(Settings.ACTION_APPLICATION_SETTINGS);      

    8.          startActivity(intent);     

    9.          }

     

    public static final class Settings.Secure extends Settings.NameValueTable

    public static final String INSTALL_NON_MARKET_APPS

    Since: API Level 3

    Whether the package installer should allow installation of apps downloaded from sources other than the Android Market (vending machine). 1 = allow installing from other sources 0 = only allow installing from the Android Market

     

    下面是程序更新的幾個步驟演示:





    OVER!

    posted on 2010-08-10 14:00 Xu Jianxiang 閱讀(19477) 評論(6)  編輯  收藏 所屬分類: Android

    評論:
    # re: Android 程序的安裝、卸載和更新 2010-11-09 22:23 | Tal
    你好 我現(xiàn)在想做一個電子市場

    我想知道里面的程序如何檢測到是否有新版本需要升級呢??

    望回復(fù)!

    QQ:386367781  回復(fù)  更多評論
      
    # re: Android 程序的安裝、卸載和更新[未登錄] 2010-11-18 15:34 | 新手
    你好
    上述代碼我在android中調(diào)試了一下
    存在以下問題,還望指點下
    1:PackageInstallObserver observer = new PackageInstallObserver();

    中PackageInstallObserver 這個類是你自己寫的嗎?我在SDK中找不到,若是你自己寫的。還望把代碼再發(fā)下
    2:pm.installPackage(mPackageURI, observer, installFlags);

    中的installPackage方法在SDK中找不到

    十分著急,望盡快 回復(fù),不勝感激~~~~  回復(fù)  更多評論
      
    # re: Android 程序的安裝、卸載和更新 2010-12-14 22:23 | Xu Jianxiang
    @Tal

    market需要自行處理版本檢測相關(guān);新的sdk,google market添加了該機制,只有market支持,第三方的market均需要自行實現(xiàn)。  回復(fù)  更多評論
      
    # re: Android 程序的安裝、卸載和更新 2010-12-14 22:25 | Xu Jianxiang
    @新手
    這個是系統(tǒng)類,sdk屏蔽了該類,用引用它,必須在完整api的基礎(chǔ)上開發(fā);所以第三方的應(yīng)用,建議還是用Intent機制實現(xiàn)之。  回復(fù)  更多評論
      
    # re: Android 程序的安裝、卸載和更新 2011-03-03 15:03 | wu
    packageName想請問一下 這東西是哪獲取的  回復(fù)  更多評論
      
    # re: Android 程序的安裝、卸載和更新 2012-09-02 14:37 | 一個新手
    最后那段代碼您有具體實現(xiàn)的代碼或者能指點我一下嗎?看不大懂。。。。。謝謝
    QQ:195310723
      回復(fù)  更多評論
      
    主站蜘蛛池模板: 在线观看国产情趣免费视频 | 日韩免费一区二区三区| 亚洲精品动漫免费二区| 国产成人亚洲精品影院| 蜜桃成人无码区免费视频网站| 亚洲三级高清免费| 亚洲人成国产精品无码| 免费国产黄网站在线观看视频| 亚洲国产成人久久精品软件| 久久精品亚洲乱码伦伦中文| 亚洲一区二区三区免费在线观看 | 亚洲免费观看网站| 亚洲乱色熟女一区二区三区蜜臀| 亚洲天堂在线视频| 无人在线直播免费观看| 国产成人精品免费大全| 亚洲av专区无码观看精品天堂| 在线亚洲97se亚洲综合在线| 国产成人精品免费视频网页大全| 特级aaaaaaaaa毛片免费视频| 亚洲小视频在线观看| 亚洲国产精品网站在线播放 | 老司机精品视频免费| 亚洲第一成年网站大全亚洲| 国产拍拍拍无码视频免费| 亚洲精品国产日韩| 国产亚洲综合成人91精品| 在线播放免费人成视频在线观看| 最新国产乱人伦偷精品免费网站| 亚洲AV永久纯肉无码精品动漫 | 国产91在线|亚洲| 亚洲伊人色欲综合网| 全免费a级毛片免费看无码| 免费不卡在线观看AV| 国产99久久久久久免费看| 亚洲中文字幕久久无码| 亚洲精品WWW久久久久久| 永久免费av无码网站韩国毛片| 亚洲综合激情五月色一区| 亚洲成a人片在线观看日本| 国产h视频在线观看网站免费|