feat(deeplink): прямое открытие в пакете стороннего сервиса (packageName)

This commit is contained in:
nk
2026-06-08 14:05:59 +03:00
parent cbd6451ee0
commit 92a7c614c1
2 changed files with 30 additions and 1 deletions

View File

@@ -15,6 +15,32 @@ object DeeplinkNavigator {
val url = service.buildSearchUrl(track.artist, track.song)
Log.d("DeeplinkNavigator", "url=$url")
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
val pkg = service.packageName
if (pkg != null) {
// Сторонний клиент: открыть напрямую в его пакете, если установлен.
val installed = try {
context.packageManager.getPackageInfo(pkg, 0)
true
} catch (e: Exception) {
false
}
if (installed) {
intent.setPackage(pkg)
try {
context.startActivity(intent)
return
} catch (e: Exception) {
Log.e("DeeplinkNavigator", "Не удалось открыть в $pkg", e)
// упадём в общий путь ниже (системный выбор / браузер)
}
} else {
Toast.makeText(context, "${service.displayName} не установлено", Toast.LENGTH_SHORT).show()
return
}
}
// Обычные сервисы (или фолбэк) — системный выбор приложения.
try {
context.startActivity(Intent.createChooser(intent, "Открыть в..."))
} catch (e: Exception) {

View File

@@ -3,7 +3,10 @@ package com.radiola.domain.model
enum class DeeplinkService(
val serviceId: String,
val displayName: String,
val searchUrlTemplate: String
val searchUrlTemplate: String,
// Пакет стороннего приложения: если задан — открываем поиск прямо в нём
// (setPackage), иначе через системный выбор «Открыть в...».
val packageName: String? = null
) {
YANDEX("yandex", "Яндекс Музыка", "https://music.yandex.ru/search?text=%s"),
VK("vk", "ВК Музыка", "https://vk.com/audio?q=%s"),