1. 程式人生 > >如何在自己的App中呼叫Android系統自帶的安裝/解除安裝程式

如何在自己的App中呼叫Android系統自帶的安裝/解除安裝程式

AppUtils裡面寫了如何安裝和解除安裝apk(這段程式碼出自這裡:點選開啟連結~),這裡的安裝和解除安裝呼叫的是Android本身的一個安裝解除安裝,所以可能頁面不會太優雅,並不符合商業App的期望,如果要做到更優雅的實現,就要用到靜默安裝/解除安裝,這個可以參照網上教程,我這裡有一篇轉載還是很不錯的,大家可以參照一下:Android中實現靜態的預設安裝和解除安裝應用~

public class AppUtils {

    /* 安裝apk */
    public void installApk(Context context, String fileName) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.parse("file://" + fileName), "application/vnd.android.package-archive");
        context.startActivity(intent);
    }

    /* 解除安裝apk */
    public void uninstallApk(Context context, String packageName) {
//        Uri uri = Uri.parse("package:" + packageName);
        Uri uri = Uri.fromParts("package", packageName, null);
        Intent intent = new Intent(Intent.ACTION_DELETE, uri);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);//一開始這句話是沒有的,執行的時候就報了這個錯誤“ android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want? ”,百度之後,得知,從一個Activity中要通過intent調出另一個Activity的話需要加上這個flag,所以各位切記,這句話不能漏
        context.startActivity(intent);
    }
}

在MainActivity中是這樣使用的,在這裡,我以安裝企鵝為例,先把企鵝的apk放到了我自定義好的一個資料夾中:

public class MainActivity extends Activity {
    AppUtils appUtils = new AppUtils();
    String fileName = "";
    String packageName = "";
 
    Button btnCopyTp;
    @BindView(R.id.btn_xz)
    Button btnXz;
    @BindView(R.id.btn_az)
    Button btnAz;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);

    }

    @OnClick({R.id.btn_xz, R.id.btn_az)
    public void onClick(View view) {
        switch (view.getId()) {  
            case R.id.btn_xz://解除安裝程式

                String archiveFilePath = Environment.getExternalStorageDirectory() + "/MyFiles/Download/QQ_482.apk";//安裝包路徑
                PackageManager pm = getPackageManager();
                PackageInfo info = pm.getPackageArchiveInfo(archiveFilePath, PackageManager.GET_ACTIVITIES);
                if (info != null) {
                    ApplicationInfo appInfo = info.applicationInfo;
                    packageName = appInfo.packageName;  //得到安裝包名稱 
                    xz(context, packageName);
                }
                break;
            case R.id.btn_az://安裝程式
                fileName = Environment.getExternalStorageDirectory() + "/MyFiles/Download/QQ_482.apk"; 
                File file = new File(fileName);
                if (file.exists()) {
                    az(context, fileName); 
                }

                break;
        }
    }

    public void az(Context context, String fileName) {
        appUtils.installApk(context, fileName);
    }

    public void xz(Context context, String packageName) {
        appUtils.uninstallApk(context, packageName);
    } 
}

佈局檔案:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.honey.mytest.activity.MainActivity"> 

    <Button
        android:text="通過我們的APP解除安裝其他應用"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btn_xz"
        android:layout_below="@+id/btn_copy_tp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="56dp" />

    <Button
        android:text="通過我們的APP安裝其他應用"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_xz"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/btn_az" />
</RelativeLayout>


相關推薦

如何在自己App呼叫Android系統安裝/解除安裝程式

AppUtils裡面寫了如何安裝和解除安裝apk(這段程式碼出自這裡:點選開啟連結~),這裡的安裝和解除安裝呼叫的是Android本身的一個安裝解除安裝,所以可能頁面不會太優雅,並不符合商業App的期望,如果要做到更優雅的實現,就要用到靜默安裝/解除安裝,這個可以參照網上教

呼叫Android系統相機拍照,從相簿獲取圖片(相容7.0系統

一,前言: 在日常的手機應用開發過程中,經常會遇到上傳圖片的需求,像上傳頭像之類的,這就需要呼叫系統的相機,相簿獲取照片。但是在Android 系統7.0之後認為這種操作是不安全的,這篇文章主要就是記錄7.0獲取照片遇到的問題。 二,FileProvider介紹 都

KEIL自己製作庫檔案呼叫系統的庫檔案不一定用這種方法

Keil的lib生成個人總結   1. 生成lib 的工程可以沒有main函式,可以只有一個.c檔案,一個.c檔案中可以只有一個函式 2. 需要在lib工程中建立一個.h檔案, 必須 用extern 宣告各全域性變數和函式. 3. 呼叫lib檔案的工程中必須包括lib中的.

調用aNDROID系統功能

ont hao123 provide music content vid uri android系統 系統 CONTENTpROVIDER%E5%9F%BA%E7%A1%80%E4%B9%8BURI http://music.hao123.com/songlist/495

Android系統的MediaRecorder結合Camera實現視訊錄製及播放功能。

    近期,公司專案新增了需求,需要視訊錄製,然後儲存到本地,再播放...。 看了很多其他的框架,說不出好壞,應該說各有千秋吧。但我覺得還是原生的靠譜,就是谷歌系統自帶的MediaRecorder。 不多說上程式碼吧(已經測試,沒問題)。 程式碼沒什麼複雜的,都是些

Android 系統圖片裁剪功能(適配7.0、8.0、對了還有小米手機)

前段時間寫了如何獲取相簿和拍照之後的照片並且進行顯示和上傳,這一次是如何進行圓形影象製作,經常看我寫的筆記的人會知道,我很懶。那麼我就懶的自定義了,目前需求就用原生的就好了,大神的輪子,我會在後面進行推薦。這篇筆記是依賴於:Android呼叫相簿、相機(相容6.0、7.0、8.0) 文

Android系統的camera預設使用後置攝像頭

 a/packages/apps/Camera/src/com/android/camera/CameraSettings.java +++ b/packages/apps/Camera/src/com/android/camera/CameraSettings.java @@ -420,

Android系統Spinner+Adapter基礎

屬性:android:spinnerMode="" 下拉選單的展示方式 屬性值:dropdown-下拉方式(預設的) dialog-對話方塊方式 如果下拉方式是dialog,那麼可以指定標題android:prompt="@string/title"(只能引用,不能直接寫文字) androi

android系統的適配佈局activity_list_item

理想:註冊頁面,資訊填寫後,跳轉到另外一個activity 結果:一點註冊,app就閃退 日誌顯示:java.lang.IllegalStateException: ArrayAdapter requ

Android系統更新DownloadManager用法

效果圖如下:    ↳ android.app.DownloadManager 下載管理器是一個處理長時間執行的HTTP下載的系統服務,通過此API請求下載的應用程式應為ACTION_NOTIFICATION_CLICKED註冊一個廣播接收器,以便在使用者單擊通

Android系統AEC/AGC/NC的demo

1.聲學回聲消除器(AEC) AcousticEchoCanceler類消除了從遠端捕捉到音訊訊號上的訊號的作用,回聲消除AcousticEchoCanceler繼承自AudioEffect. 2.自動

Android 系統Activity效果

1.fullscreen Activity 佈局: <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.and

android 系統主題樣式及定義主題樣式

From: http://blog.csdn.net/dawanganban/article/details/17732701 http://www.cnblogs.com/bluestorm/archive/2012/07/12/2588724.html

Android-系統通知欄and定義通知欄

系統自帶通知欄:在佈局檔案中寫一個button,寫一個sendNotification方法public void sendNotification(View view){ //例項化通知管理器 NotificationManager notif

用NDK呼叫Android手機的openssl庫函式

目標: 目前很多Android手機已經自帶了openssl庫, 即libssl.so, libcrypto.so, 以下示例實現了APK通過NDK呼叫openssl庫函式PKCS5_PBKDF2_HMAC(金鑰生成演算法) 1) 在android工程中建立 jni目錄 2)

Android系統主題初探

Android系統有很多自帶的主題,而且,隨著Androi版本的不斷更新,系統的預設主題也在不斷的變化,這裡就簡要介紹一下5.0系統的主題。 1. 系統自帶的主題 那麼系統自帶的主題有哪些呢,在工程目錄\frameworks\base\core\res\res\values

Android系統分享功能的實現(可同時分享文字和圖片)

簡單,不解釋,直接上程式碼,可直接使用! 程式碼如下: /** * 分享功能 * * @param context * 上下文 * @param activ

Android 系統隱式intent應用

完成效果:撥打電話,傳送簡訊,播放音樂,播放視訊,開啟網頁,檢視圖片,通知欄。 PopWindow中完成效果:拍照片,從相簿選擇照片並且可裁減。 首先在清單檔案中加入如下許可權: <uses-permission android:name="android.perm

Android有趣的全透明效果--Activity及Dialog的全透明(附android系統圖示大全)

1.Activity全透明 同學zzm給了這個有趣的程式碼,現在公佈出來。 先在res/values下建colors.xml檔案,寫入: <? xml version = "1.0" encoding = "UTF-8" ?> < resour

Android系統樣式(android:theme)

android:theme="@android:style/Theme.Dialog" : Activity顯示為對話方塊模式 android:theme="@android:style/Theme.NoTitleBar" : 不顯示應用程式標題欄 android:t