android應用後台安裝,靜默安裝的代碼實現方法

來源:互聯網
上載者:User

首先,你要有linux環境或其他可以mmm交叉編譯的環境,因為這個用到的是隱藏api,SDK中沒有的,ecilipse裡面會提示包不存在,但交叉編譯可以,如果你不知道

 

import android.app.Activity;import android.os.Bundle;import android.content.Intent;import android.content.pm.PackageInfo;import android.content.pm.PackageManager;import android.content.pm.PackageManager.NameNotFoundException;import android.content.pm.IPackageInstallObserver;import android.content.res.Resources;import android.graphics.drawable.Drawable;import android.net.Uri;import android.os.Environment;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;import android.widget.TextView;public class InstallActivity extends Activity {    /** Called when the activity is first created. */    private Button btn2=null;    private final int INSTALL_COMPLETE = 1;    final static int SUCCEEDED = 1;    final static int FAILED = 0;    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);        btn=(Button) findViewById(R.id.btn2);        btn2.setOnClickListener(listener2);} private OnClickListener listener2=new  OnClickListener(){        public void onClick(View v) {            String fileName = Environment.getExternalStorageDirectory() +  "/baidu/"+"UC.apk";             Uri uri = Uri.fromFile(new File(fileName));            int installFlags = 0;            PackageManager pm = getPackageManager();            try {                PackageInfo pi = pm.getPackageInfo("com.uc.browser",                         PackageManager.GET_UNINSTALLED_PACKAGES);                if(pi != null) {                    installFlags |= PackageManager.INSTALL_REPLACE_EXISTING;                }            } catch (NameNotFoundException e) {            }//            String installerPackageName = getIntent().getStringExtra(//                    Intent.EXTRA_INSTALLER_PACKAGE_NAME);                        PackageInstallObserver observer = new PackageInstallObserver();            pm.installPackage(uri, observer, installFlags, "com.uc.browser");         }    };        class PackageInstallObserver extends IPackageInstallObserver.Stub {        public void packageInstalled(String packageName, int returnCode) {            Message msg = mHandler.obtainMessage(INSTALL_COMPLETE);            msg.arg1 = returnCode;            mHandler.sendMessage(msg);        }    };        private Handler mHandler = new Handler() {        public void handleMessage(Message msg) {            switch (msg.what) {                case INSTALL_COMPLETE:                    // Update the status text                    // Show the ok button                    int centerTextLabel;                    Drawable centerTextDrawable = null;                    if(msg.arg1 == SUCCEEDED) {                                            } else {}                    if (centerTextDrawable != null) {}                    break;                default:                    break;            }        }    };   }

重點是要實現一個這個類PackageInstallObserver,另外要注意import android.content.pm.……的那些包一定要匯入。android.mk檔案如下

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE_TAGS := userLOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_PACKAGE_NAME := InstallActivityLOCAL_CERTIFICATE := platforminclude $(BUILD_PACKAGE)

重點是LOCAL_CERTIFICATE := platform要對

另外編譯的時候有可能會報R.java類重複錯誤,把你工程下gen檔案夾刪除即可,不會影響編譯,傳說中會在別的地方自動產生^……

這個在2.1上編譯通過可以用,後台安裝可以實現,後台卸載也可以實現

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.