Sfoglia il codice sorgente

1.新增安装应用并唤起该应用

JaycePC 11 mesi fa
parent
commit
18e157213b

+ 1 - 0
app/src/main/AndroidManifest.xml

@@ -33,6 +33,7 @@
     <uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 外存储写权限,构建语法需要用到此权限 -->
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 外存储读权限,构建语法需要用到此权限 -->
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 配置权限,用来记录应用配置信息 -->
+    <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
     <uses-permission
         android:name="android.permission.WRITE_SETTINGS"
         tools:ignore="ProtectedPermissions" /> <!-- 手机定位信息,用来为语义等功能提供定位,提供更精准的服务 -->

+ 34 - 0
app/src/main/java/com/example/chemical/ui/SplashActivity.kt

@@ -2,9 +2,14 @@ package com.example.chemical.ui
 
 import android.Manifest
 import android.app.AlertDialog
+import android.content.Intent
+import android.net.Uri
+import android.os.Build
 import android.os.Bundle
 import android.os.Handler
+import android.util.Log
 import android.view.LayoutInflater
+import androidx.core.content.FileProvider
 import com.example.chemical.BuildConfig
 import com.example.chemical.ChemicalApp
 import com.example.chemical.comm.Constants
@@ -12,6 +17,7 @@ import com.example.chemical.databinding.ActivitySplashBinding
 import com.example.chemical.utils.NetworkUtils
 import com.example.chemical.utils.SharedPreferencesHelper
 import com.example.chemical.utils.UiManager
+import com.google.gson.Gson
 import com.lztek.toolkit.Lztek
 import com.rc.core.log.RcLog
 import com.rc.core.ui.activity.RcBaseActivity
@@ -20,6 +26,7 @@ import com.rc.core.util.DeviceUtils
 import com.rc.httpcore.HttpConfig
 import com.rc.httpcore.client.ApiRepository
 import com.tbruyelle.rxpermissions2.RxPermissions
+import java.io.File
 
 class SplashActivity : RcBaseActivity<ActivitySplashBinding>() {
 
@@ -136,6 +143,7 @@ class SplashActivity : RcBaseActivity<ActivitySplashBinding>() {
 //    }
 
     private fun queryAppVersion() {
+        // TODO 安装并重启本应用
         showLoading("版本检测中...")
         val toDouble = DeviceUtils.getVersionName(this)//获取当前版本号
 
@@ -163,9 +171,11 @@ class SplashActivity : RcBaseActivity<ActivitySplashBinding>() {
                                         //同步进行更新
                                         upDownloadManager(data!!.appInfo!!.remark)
                                     }
+
                                     data!!.appInfo!!.url != null -> {
                                         upDownloadManager(data.appInfo!!.url)
                                     }
+
                                     else -> {
                                         // 启动定时任务
                                         try {
@@ -276,6 +286,30 @@ class SplashActivity : RcBaseActivity<ActivitySplashBinding>() {
         myHandler.stop()
     }
 
+    /**
+     * 安装应用并唤起该应用
+     */
+    private fun installApk(apkFile: File) {
+        val intent = Intent(Intent.ACTION_VIEW)
+        if (Build.VERSION.SDK_INT >= 24) {
+            // 与AndroidManifest.xml中的authorities配置一致
+            val authority =
+                BuildConfig.APPLICATION_ID + ".fileprovider"
+            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
+            val uri = FileProvider.getUriForFile(this@SplashActivity, authority, apkFile)
+            intent.setDataAndType(uri, "application/vnd.android.package-archive")
+            // 如果需要新任务(Intent.FLAG_ACTIVITY_NEW_TASK),需加uri授权处理
+            // grantUriPermission(getApplicationContext(), uri, intent);
+        } else {
+            val uri = Uri.fromFile(apkFile)
+            intent.setDataAndType(uri, "application/vnd.android.package-archive")
+        }
+        intent.putExtra("IMPLUS_INSTALL", "SILENT_INSTALL")
+        // 如果需要新任务
+        // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+        startActivity(intent)
+        finish()
+    }
 
 
 }

+ 6 - 1
app/src/main/res/xml/file_paths_public.xml

@@ -1,5 +1,11 @@
 <?xml version="1.0" encoding="utf-8"?>
 <paths>
+    <cache-path
+        name="cache"
+        path="/" />
+    <external-path
+        name="sdcard"
+        path="/" />
     <external-path
         name="external"
         path="." />
@@ -15,5 +21,4 @@
     <root-path
         name="root_path"
         path="." />
-
 </paths>