1

我建立一個應用程序中,我以編程方式收集安裝在設備上的所有應用程序的詳細信息的應用程序圖標(應用程序名稱,的packageName,APPICON,和其他一些appDetails)。存儲和檢索所有已安裝的應用程序編程

然而,我觀察到獲取和在數據結構中存儲這些應用程序的詳細信息所花的時間可感知量。我曾嘗試使用SharedPreferences,這樣我可以保持不同的應用程序執行之間的數據,而不是啓動我的應用程序啓動每一次讀取存儲一些應用程序的細節。

然而,存儲應用程序圖標(可繪製)會佔用大量空間,並且讓我懷疑是否有更有效的方式來保留應用程序執行之間的上述應用程序數據,除非當然,新應用程序安裝後上次安裝的應用程序是以編程方式提取的。

所以,我的問題是,有存儲應用程序圖標(可繪)這樣的有效的方式,他們不佔用太多空間,並在同一時間,應用程序可以設置不同之間保持應用程序執行?

回答

0

我相信你最好的拍攝是節省安裝在您的應用數據庫應用程序的列表。您可以將應用程序的可繪製圖標作爲編碼字符串存儲。

String image = getImageFromDrawable(app.loadIcon(pm)); 

其中app是ApplicationInfo,pm是PackageManager。

public String getImageFromDrawable(Drawable drawable){ 
    String img = null; 
    if(drawable instanceof BitmapDrawable) { 
     Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream); 
     byte[] arr = stream.toByteArray(); 
     img = Base64.encodeToString(arr, Base64.URL_SAFE); 
     return img; 
    } 
    return null; 
} 

然後,您可以在應用程序數據庫中存儲應用程序的詳細信息。

0

這可以通過圖標轉換爲字符串並使用Parceler它們存儲在一個文件中完成。要做到這一點,

  1. 創建應用POJO類圖標,位圖型
  2. 的屬性讓你的類Parcelable
  3. 初始化這個類類型的ArrayList與存儲的所有圖標
  4. 包裹並將這些對象存儲在一個文件中

現在,Bitmap類型的屬性不是Parcelable,因此您必須將它們轉換爲parcelable類型。您可以使用此功能轉換:

static String bitMapToString(Bitmap bitmap) { 
    ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
    return Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); 
} 

和下面的函數將數據轉換回位圖型。

static Bitmap stringToBitMap(String encodedString) { 
    try { 
     byte[] encodeByte = Base64.decode(encodedString, Base64.DEFAULT); 
     return BitmapFactory.decodeByteArray(encodeByte, 0, encodeByte.length); 
    } catch (Exception e) { 
     e.getMessage(); 
     return null; 
    } 
} 
相關問題