APK类似静默安装的方法

来源:互联网 发布:制作动态原理图软件 编辑:程序博客网 时间:2024/06/05 03:54

前段时间有客户需求:后台某个APK自动更新下载完成之后,自动安装,不弹出安装APK的对话框

更改对策记录如下:

diff --git a/src/com/android/packageinstaller/InstallAppProgress.java b/src/com/android/packageinstaller/InstallAppProgress.java
index c8e4133..b219b08 100755
--- a/src/com/android/packageinstaller/InstallAppProgress.java
+++ b/src/com/android/packageinstaller/InstallAppProgress.java
@@ -110,7 +110,13 @@ public class InstallAppProgress extends Activity implements View.OnClickListener
                             }
                         }
                         if (enabled) {
-                            mLaunchButton.setOnClickListener(InstallAppProgress.this);
+       if(mAppInfo.packageName.equals("things.android.updater")||mAppInfo.packageName.equals("things.android.player"))
+       {
+        startActivity(mLaunchIntent);
+                 finish();
+       }
+       else
+                             mLaunchButton.setOnClickListener(InstallAppProgress.this);
                         } else {
                             mLaunchButton.setEnabled(false);
                         }
diff --git a/src/com/android/packageinstaller/PackageInstallerActivity.java b/src/com/android/packageinstaller/PackageInstallerActivity.java
old mode 100644
new mode 100755
index a11e11e..d95854f
--- a/src/com/android/packageinstaller/PackageInstallerActivity.java
+++ b/src/com/android/packageinstaller/PackageInstallerActivity.java
@@ -397,7 +397,43 @@ public class PackageInstallerActivity extends Activity implements OnCancelListen
         mInstallFlowAnalytics.setSystemApp(
                 (mAppInfo != null) && ((mAppInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0));
 
-        startInstallConfirm();
+          // Start subactivity to actually install the application
+  if(pkgName.equals("things.android.updater")||pkgName.equals("things.android.player"))
+   {
+                mInstallFlowAnalytics.setInstallButtonClicked();
+                Intent newIntent = new Intent();
+                newIntent.putExtra(PackageUtil.INTENT_ATTR_APPLICATION_INFO,
+                        mPkgInfo.applicationInfo);
+                newIntent.setData(mPackageURI);
+                newIntent.setClass(this, InstallAppProgress.class);
+                newIntent.putExtra(InstallAppProgress.EXTRA_MANIFEST_DIGEST, mPkgDigest);
+                newIntent.putExtra(
+                        InstallAppProgress.EXTRA_INSTALL_FLOW_ANALYTICS, mInstallFlowAnalytics);
+                String installerPackageName = getIntent().getStringExtra(
+                        Intent.EXTRA_INSTALLER_PACKAGE_NAME);
+                if (mOriginatingURI != null) {
+                    newIntent.putExtra(Intent.EXTRA_ORIGINATING_URI, mOriginatingURI);
+                }
+                if (mReferrerURI != null) {
+                    newIntent.putExtra(Intent.EXTRA_REFERRER, mReferrerURI);
+                }
+                if (mOriginatingUid != VerificationParams.NO_UID) {
+                    newIntent.putExtra(Intent.EXTRA_ORIGINATING_UID, mOriginatingUid);
+                }
+                if (installerPackageName != null) {
+                    newIntent.putExtra(Intent.EXTRA_INSTALLER_PACKAGE_NAME,
+                            installerPackageName);
+                }
+                if (getIntent().getBooleanExtra(Intent.EXTRA_RETURN_RESULT, false)) {
+                    newIntent.putExtra(Intent.EXTRA_RETURN_RESULT, true);
+                    newIntent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
+                }
+                if(localLOGV) Log.i(TAG, "downloaded app uri="+mPackageURI);
+                startActivity(newIntent);
+                finish();
+   }
+   else
+         startInstallConfirm();
     }
 
     void setPmResult(int pmResult) {

对策在瑞芯微的平台上实现的,things.android.player和things.android.updater 是APK的包名!

0 0
原创粉丝点击