簡體   English   中英

以編程方式安裝apk而不定義apk名稱

[英]installing apk programmatically without defining the apk name

我試圖從SD卡編程安裝apk而不提及apk的名稱。 我現在可以做的是我可以安裝我在我的代碼中命名的apk。 但是如果我想在我的設備上安裝另一個apk並且為此我必須進入我的代碼並更改apk的名稱,這不方便。 有沒有辦法在運行時動態獲取apk文件的名稱? 例如獲取可安裝的apk列表,以便用戶可以選擇安裝哪一個?

Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
intent.setDataAndType(
Uri.parse("file:///mnt/sdcard/extsd/download   /app.apk"),
"application/vnd.android.package-archive");
startActivity(intent);

更新:之前的代碼已刪除,因為包含錯誤。 這是一個有效的代碼:

public class InstallAPKActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ExtFilter apkFilter = new ExtFilter("apk");
        File file[] = Environment.getExternalStorageDirectory().listFiles(apkFilter);
        Log.d("InstallApk", "Filter applied. Size: "+ file.length);

        for (int i=0; i < file.length; i++)
        {
            Log.d("InstallApk", "FileName:" + file[i].getName());
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setDataAndType(Uri.fromFile(file[i]), "application/vnd.android.package-archive");
            startActivity(intent);
        }





    }

    class ExtFilter implements FilenameFilter { 
        String ext; 
        public ExtFilter(String ext) { 
            this.ext = "." + ext; 
        } 
        public boolean accept(File dir, String name) { 
            return name.endsWith(ext); 
        }
    }
}

更新2:此程序只是枚舉所有apk文件並將它們寫入File數組。 之后,它嘗試按順序安裝所有這些apk文件。 例如,在我的情況下,我將應用程序golddream.apk放在我的模擬器的SD卡上。 該應用程序是為SDK v 10開發的。我在logcat中看到以下輸出:

12-21 06:44:39.453: D/InstallApk(14897): Filter applied. Size: 1
12-21 06:44:39.453: D/InstallApk(14897): FileName:golddream.apk
12-21 06:44:39.463: I/ActivityManager(62): Starting: Intent { act=android.intent.action.VIEW dat=file:///mnt/sdcard/golddream.apk typ=application/vnd.android.package-archive cmp=com.android.packageinstaller/.PackageInstallerActivity } from pid 14897
12-21 06:44:40.073: I/ActivityManager(62): Displayed com.android.packageinstaller/.PackageInstallerActivity: +578ms (total +1s229ms)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM