Skip to content
This repository was archived by the owner on Jul 18, 2026. It is now read-only.

Commit 07c65a4

Browse files
committed
安装包下载完成后会发送一条通知,点击安装,防止应用在后台无法触发安装。
1 parent cf48194 commit 07c65a4

5 files changed

Lines changed: 58 additions & 6 deletions

File tree

app/src/main/java/com/yenaly/han1meviewer/worker/HUpdateWorker.kt

Lines changed: 46 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ package com.yenaly.han1meviewer.worker
22

33
import android.annotation.SuppressLint
44
import android.app.Notification
5+
import android.app.PendingIntent
56
import android.content.Context
7+
import android.content.Intent
68
import android.content.pm.ServiceInfo
79
import android.os.Build
8-
import android.util.Log
910
import androidx.core.app.NotificationCompat
1011
import androidx.core.app.NotificationManagerCompat
12+
import androidx.core.content.FileProvider
1113
import androidx.core.net.toFile
1214
import androidx.core.net.toUri
1315
import androidx.work.Constraints
@@ -21,6 +23,7 @@ import androidx.work.WorkManager
2123
import androidx.work.WorkerParameters
2224
import androidx.work.workDataOf
2325
import com.yenaly.han1meviewer.EMPTY_STRING
26+
import com.yenaly.han1meviewer.FILE_PROVIDER_AUTHORITY
2427
import com.yenaly.han1meviewer.Preferences
2528
import com.yenaly.han1meviewer.R
2629
import com.yenaly.han1meviewer.UPDATE_NOTIFICATION_CHANNEL
@@ -30,6 +33,7 @@ import com.yenaly.han1meviewer.util.installApkPackage
3033
import com.yenaly.han1meviewer.util.runSuspendCatching
3134
import com.yenaly.han1meviewer.util.updateFile
3235
import com.yenaly.yenaly_libs.utils.showShortToast
36+
import java.io.File
3337
import java.util.Locale
3438
import kotlin.random.Random
3539

@@ -114,6 +118,7 @@ class HUpdateWorker(
114118
if (inject.isSuccess) {
115119
val outputData = workDataOf(UPDATE_APK to file.toUri().toString())
116120
Preferences.updateNodeId = nodeId
121+
showInstallNotification(file)
117122
return Result.success(outputData)
118123
} else {
119124
inject.exceptionOrNull()?.printStackTrace()
@@ -123,9 +128,9 @@ class HUpdateWorker(
123128
}
124129
}
125130

126-
private fun createNotification(progress: Int = 0, fileSizeMB: String = "0", downloadedSizeMB: String = "0"): Notification {
131+
private fun createNotification(progress: Int = 0, fileSizeMB: String = "0", downloadedSizeMB: String = "0", isPending: Boolean = true): Notification {
127132
return NotificationCompat.Builder(context, UPDATE_NOTIFICATION_CHANNEL)
128-
.setSmallIcon(R.mipmap.ic_launcher)
133+
.setSmallIcon(R.drawable.baseline_h_24)
129134
.setOngoing(true)
130135
.setContentTitle(
131136
context.getString(
@@ -134,7 +139,7 @@ class HUpdateWorker(
134139
)
135140
.setPriority(NotificationCompat.PRIORITY_HIGH)
136141
.setOnlyAlertOnce(true)
137-
.setProgress(100, progress, false)
142+
.setProgress(100, progress, isPending)
138143
.build()
139144
}
140145

@@ -151,7 +156,8 @@ class HUpdateWorker(
151156
createNotification(
152157
progress,
153158
fileSizeMB,
154-
downloadedSizeMB
159+
downloadedSizeMB,
160+
false
155161
)
156162
)
157163
}
@@ -160,10 +166,44 @@ class HUpdateWorker(
160166
private fun createForegroundInfo(progress: Int = 0): ForegroundInfo {
161167
return ForegroundInfo(
162168
downloadId,
163-
createNotification(progress),
169+
createNotification(progress, isPending = false),
164170
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
165171
ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC
166172
} else 0
167173
)
168174
}
175+
@SuppressLint("MissingPermission")
176+
private fun showInstallNotification(file: File) {
177+
val installIntent = Intent(Intent.ACTION_VIEW).apply {
178+
val uri = FileProvider.getUriForFile(
179+
context,
180+
FILE_PROVIDER_AUTHORITY,
181+
file
182+
)
183+
setDataAndType(uri, "application/vnd.android.package-archive")
184+
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
185+
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
186+
}
187+
188+
val pendingIntent = PendingIntent.getActivity(
189+
context, 0, installIntent,
190+
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
191+
)
192+
193+
val notification = NotificationCompat.Builder(context, UPDATE_NOTIFICATION_CHANNEL)
194+
.setContentTitle(context.getString(R.string.download_complete))
195+
.setContentText(context.getString(R.string.click_to_install_update))
196+
.setSmallIcon(R.drawable.baseline_h_24)
197+
.setAutoCancel(true)
198+
.setContentIntent(pendingIntent)
199+
.addAction(
200+
NotificationCompat.Action.Builder(
201+
R.drawable.baseline_h_24,
202+
context.getString(R.string.install),
203+
pendingIntent
204+
).build()
205+
)
206+
.build()
207+
notificationManager.notify(downloadId + 1, notification)
208+
}
169209
}

app/src/main/res/values-en/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -433,4 +433,7 @@ Recommendations are as follows:\n
433433
<string name="super_resolution_quality">Quality First</string>
434434
<string name="advanced_search_combination">Advanced Search Combination</string>
435435
<string name="app_tampered">This app has been maliciously tampered with! Please pay attention to information security!</string>
436+
<string name="download_complete">Download Complete</string>
437+
<string name="click_to_install_update">Click to Install Update</string>
438+
<string name="install">Install</string>
436439
</resources>

app/src/main/res/values-ja/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,4 +438,7 @@ hanime1.me以外のドメインは、特定の時間帯にhanime1.meにリダイ
438438
<string name="super_resolution_quality">品質優先</string>
439439
<string name="advanced_search_combination">高度な検索組み合わせ</string>
440440
<string name="app_tampered">本アプリは悪意を持って改ざんされました!情報セキュリティにご注意ください!</string>
441+
<string name="download_complete">ダウンロード完了</string>
442+
<string name="click_to_install_update">クリックして更新をインストール</string>
443+
<string name="install">インストール</string>
441444
</resources>

app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -438,4 +438,7 @@
438438
<string name="super_resolution_quality">质量优先</string>
439439
<string name="advanced_search_combination">高级搜索组合</string>
440440
<string name="app_tampered">本应用已被恶意篡改!请注意信息安全!</string>
441+
<string name="download_complete">下载完成</string>
442+
<string name="click_to_install_update">点击安装更新</string>
443+
<string name="install">安装</string>
441444
</resources>

app/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,4 +468,7 @@
468468
<string name="super_resolution_quality">品質優先</string>
469469
<string name="advanced_search_combination">進階搜尋組合</string>
470470
<string name="app_tampered">本應用已被惡意篡改!請注意資訊安全!</string>
471+
<string name="download_complete">下載完成</string>
472+
<string name="click_to_install_update">點擊安裝更新</string>
473+
<string name="install">安裝</string>
471474
</resources>

0 commit comments

Comments
 (0)