Как определить приложение для смс, установленное по-умолчанию
Нужно определить приложения с функцией отправки сообщений, выбрать то одно из них, которое установлено по-умолчанию и запустить его. Имеющийся код на эту тему, который я не понял как использовать.
fun getPackagesOfDialerApps(context: Context): List<String>? {
val packageNames: MutableList<String> = ArrayList()
val intent = Intent()
intent.action = Intent.ACTION_SENDTO
val resolveInfos =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
context.packageManager.queryIntentActivities(intent, PackageManager.ResolveInfoFlags.of(
MATCH_DEFAULT_ONLY.toLong()))
}else{
@Suppress("DEPRECATION")
context.packageManager.queryIntentActivities(intent, 0)
}
for (resolveInfo in resolveInfos) {
val activityInfo = resolveInfo.activityInfo
packageNames.add(activityInfo.applicationInfo.packageName)
}
return packageNames
}
fun isDefaultDialer(context: Context, packageNameToCheck: String = context.packageName): Boolean {
val dialingIntent = Intent(Intent.ACTION_SENDTO).addCategory(Intent.CATEGORY_DEFAULT)
val resolveInfoList =
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
context.packageManager.queryIntentActivities(dialingIntent, PackageManager.ResolveInfoFlags.of(0))
}else{
@Suppress("DEPRECATION")
context.packageManager.queryIntentActivities(dialingIntent, 0)
}
if (resolveInfoList.size != 1)
return false
return packageNameToCheck == resolveInfoList[0].activityInfo.packageName
}
val phoneNumber = "+79065808808"
val uri = Uri.parse("smsto:$phoneNumber")
val launchIntent = Intent("${isDefaultSender(this)}", uri)
startActivity(launchIntent)
Так же указал в манифесте:
<uses-permission
android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" />