feat(deeplink): прямое открытие в пакете стороннего сервиса (packageName)
This commit is contained in:
@@ -15,6 +15,32 @@ object DeeplinkNavigator {
|
|||||||
val url = service.buildSearchUrl(track.artist, track.song)
|
val url = service.buildSearchUrl(track.artist, track.song)
|
||||||
Log.d("DeeplinkNavigator", "url=$url")
|
Log.d("DeeplinkNavigator", "url=$url")
|
||||||
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(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 {
|
try {
|
||||||
context.startActivity(Intent.createChooser(intent, "Открыть в..."))
|
context.startActivity(Intent.createChooser(intent, "Открыть в..."))
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
|
|||||||
@@ -3,7 +3,10 @@ package com.radiola.domain.model
|
|||||||
enum class DeeplinkService(
|
enum class DeeplinkService(
|
||||||
val serviceId: String,
|
val serviceId: String,
|
||||||
val displayName: String,
|
val displayName: String,
|
||||||
val searchUrlTemplate: String
|
val searchUrlTemplate: String,
|
||||||
|
// Пакет стороннего приложения: если задан — открываем поиск прямо в нём
|
||||||
|
// (setPackage), иначе через системный выбор «Открыть в...».
|
||||||
|
val packageName: String? = null
|
||||||
) {
|
) {
|
||||||
YANDEX("yandex", "Яндекс Музыка", "https://music.yandex.ru/search?text=%s"),
|
YANDEX("yandex", "Яндекс Музыка", "https://music.yandex.ru/search?text=%s"),
|
||||||
VK("vk", "ВК Музыка", "https://vk.com/audio?q=%s"),
|
VK("vk", "ВК Музыка", "https://vk.com/audio?q=%s"),
|
||||||
|
|||||||
Reference in New Issue
Block a user