2013-04-13 131 views
1

我創建了一個android應用程序,並將其導出爲*.apk。安裝成功後是否可以自動刪除apk文件?安裝後刪除應用程序(* .apk)

+0

從哪裏刪除APK? –

+0

來自SD /磁盤。由於我正在將APK發給我的朋友進行beta測試。 –

+0

但一些應用程序,如藍牙應用程序發件人,他們再次獲得它的apk。 – Senthil

回答

7

如果要安裝一些其他APK通過你的應用程序下載,並希望刪除一旦成功安裝後,也跟着我 - )

第1步: 聲明按照您的AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" /> 
<uses-permission android:name="android.permission.INSTALL_PACKAGES" /> 
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" /> 
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />  
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_INSTALL" /> 
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" /> 
權限

第2步: 登記接收

<receiver 
      android:name="com.az.appstore.InstallReceiver" 
      android:enabled="true" > 
      <intent-filter> 
       <action android:name="android.intent.action.PACKAGE_ADDED" /> 
       <action android:name="android.intent.action.PACKAGE_CHANGED" /> 
       <action android:name="android.intent.action.PACKAGE_REMOVED" /> 
       <action android:name="android.intent.action.PACKAGE_INSTALL" /> 


       <data android:scheme="package" /> 
      </intent-filter> 
     </receiver> 

第4步:

在你安裝活動創建一個哈希表這樣的,我在ApplicationMain創建的,它會根據不同的實現。

public static final ConcurrentHashMap<String, File> INSTALL_APK_INFO = new ConcurrentHashMap<String, File>(); 

並用包名和文件填充它,其中放置apk。您可以使用此方法

public static String getPackageNameForAPK(final String archiveFilePath, Context context) { 
     try { 
      PackageInfo info = context.getPackageManager().getPackageArchiveInfo(archiveFilePath, PackageManager.GET_META_DATA); 
      return info.packageName; 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
      return null; 
     } 

    } 

第5步從任何APK得到Pacakage名稱: 現在,在安裝接收器只是這樣做

if (action.equals(Intent.ACTION_PACKAGE_ADDED) || action.equals(Intent.ACTION_PACKAGE_CHANGED) || action.equals(Intent.ACTION_PACKAGE_INSTALL) || action.equals(Intent.ACTION_PACKAGE_REPLACED)) { 
      ApplicationInfo info = null; 
      try { 
       info = context.getPackageManager().getApplicationInfo(intent.getDataString().split(":")[1], PackageManager.GET_META_DATA); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      try { 
       if (info != null) { 
        File file = ApplicationMain.INSTALL_APK_INFO.get(info.packageName); 
        if (file != null) { 
         file.delete(); 
         ApplicationMain.INSTALL_APK_INFO.remove(info.packageName); 
        } 
       } 
      } catch (Exception ex) { 
       ex.printStackTrace(); 
      } 

摘要

1)創建一個HashMap和使用APK包名稱和文件填充它。文件就是您的APK存在的地方。

要求安裝APK

public static void installUpdateAPK(Context context, String pathToAPK) { 

     pathToAPK = pathToAPK.replace("file:///", ""); 

     final Intent intent = new Intent(Intent.ACTION_VIEW); 
     File file = new File(pathToAPK); 
     intent.setDataAndType(Uri.fromFile(file), APK_MIME_TYPE); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     context.startActivity(intent); 
     String name = getPackageNameForAPK(pathToAPK, context); 

     if (name != null) { 
      ApplicationMain.INSTALL_APK_INFO.put(name, file); 
     } 
    } 

2)註冊包添加,更改,安裝意圖

3)接收器上得到的是從Intent

4安裝包的名稱)從你的hashmap獲取文件對象,只需撥打delete()

+0

什麼是導入ApplicationMain的軟件包?我試圖搜索,但找不到任何。 – thepace

+0

@thepace請參閱「第4步」,您可以在任何類中聲明此映射,我已經在ApplicationMain中聲明瞭它 –

-1

當應用程序啓動時,您可以手動檢查sdcard/download文件夾(或其他可以保存apk的地方)。然後從那裏刪除它。

爲避免在每次運行中搜索,您可以在您的共享首選項中存儲first_run字段。默認情況下將字段設置爲true,第一次運行後將其設置爲false。因此,您可以檢測到第一個小矮人

+0

將工作。但是有沒有內置的方法來做到這一點? –

+0

從應用程序中無法檢測到它是否已安裝。所以最好的方法是手動完成......看我編輯的答案 – stinepike

+0

感謝您的建議...... :) –

1

如果您知道將apk下載到設備上的哪個位置,則可以在您的應用第一次運行時將其刪除。如果它位於SD卡上,則需要獲得寫入的權限。

但是,如果您不知道它保存的位置,那麼您最好還是必須掃描設備以找到包含您輸入名稱的apk文件並將其刪除。

此外,一旦安裝,apks被複制到內部存儲。任何擁有固定設備的用戶都可以恢復您的apk。

Beta測試是一個信任問題。如果你不相信你給apk安裝測試的人,不要把它給他們。

3

安裝完成後,是否從設備的SD卡中刪除APK並不重要。即使這樣的功能可以在應用程序中編程,任何擁有固定設備的用戶都可以通過始終能夠從/data/app/系統分區訪問APK。這首先有效地消除了你刪除APK的努力。

這就是說,你可以添加一個函數,在第一次運行時會刪除APK。由於APK可以保存/存儲在SD卡上的任何地方,我認爲這些問題應該幫助你。

要查找文件:Search entire sdcard for a specific file

要刪除一旦發現文件:How to delete a file from SD card?

相關問題