Android使用AsyncTask与串行执行器下载文件并调用ActivityResult问题

Android使用AsyncTask与串行执行器下载文件并调用ActivityResult问题,android,android-asynctask,download,android-install-apk,Android,Android Asynctask,Download,Android Install Apk,我有个大问题。 首先,我有一个项目列表。当用户单击每个项目时,我的应用程序开始从internet下载文件。 我已经用AsyncTask串行excutor实现了这一点。 下载文件完成后,当应用程序成功安装后,我的应用程序立即开始运行Android安装程序。我想将设备信息发送到服务器 Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.fromFile(file),"application/vnd.and

我有个大问题。 首先,我有一个项目列表。当用户单击每个项目时,我的应用程序开始从internet下载文件。 我已经用AsyncTask串行excutor实现了这一点。 下载文件完成后,当应用程序成功安装后,我的应用程序立即开始运行Android安装程序。我想将设备信息发送到服务器

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.fromFile(file),"application/vnd.android.package-archive");
activity.startActivityForResult(intent, 1);
MainActivity.java

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == 1) {
        List<PackageInfo> packs = this.getPackageManager()
                .getInstalledPackages(0);
        for (int i = 0; i < packs.size(); i++) {
            PackageInfo p = packs.get(i);
            if (InstalledPackageName != null
                    && InstalledPackageName.equals(p.packageName)) {
           //file install success 
                QstoreRestClient rest = new QstoreRestClient(this,
                        "Please wait...");
                SecurityInstallManager secure = new SecurityInstallManager();
                String strDeviceID = getUniqueDeviceId();
                String strProductID = InstalledPackageID;
                String strToken = mToken;
                String strModel = getModelDevice();
                Log.d("QSTORE mUserName", mUserName);
                Log.d("QSTORE strProductID", strProductID);
                Log.d("QSTORE strDeviceID", strDeviceID);
                Log.d("QSTORE strToken", strToken);
                Log.d("QSTORE strModel", strModel);
                String strSHA = secure.getSHAHighscore(mUserName,
                        strDeviceID, strProductID, strToken);
                rest.installShowLoading(mUserName, strProductID,
                        strDeviceID, strSHA, strModel, this);
                Log.d("QSTORE", "Already Installed");
                // return;
            }
        }
        // }

        InstalledPackageName = null;
        InstalledPackageID = null;
    }
    super.onActivityResult(requestCode, resultCode, data);
}
activityresult上受保护的void(int-requestCode、int-resultCode、Intent-data){
if(requestCode==1){
List packs=this.getPackageManager()
.getInstalledPackages(0);
对于(int i=0;i
我的问题: 您可以看到文件下载完成后,我的应用程序在新活动中运行Android安装程序,并将结果发送回主活动(调用ActivityResult()) 这里的问题是,如果用户下载5个文件,我的应用程序将运行5个新活动来安装新应用程序,这样每个子活动的结果就不能发送回主活动。
我想知道有没有办法解决这个问题?

下载完文件后,立即将文件添加到队列中。然后检查队列中的项目数是否大于1。如果大于1,请不要采取任何操作。如果等于1,则开始安装。
现在,在安装成功后,从队列中删除该条目。然后再次进行检查,查看队列中是否还有其他项目。然后遵循同样的逻辑。

这是一个非常棒的解决方案,我非常感谢您的帮助,没问题。您可能必须正确处理错误情况,如安装失败、下载失败等