Runt
2025-08-03 e7802c483c288645919a86ddb939f38edc13f96b
libmvi/src/main/java/com/runt/open/mvi/base/BaseActivity.kt
@@ -2,10 +2,14 @@
import android.Manifest
import android.app.ActivityManager
import android.app.UiModeManager
import android.content.ClipData
import android.content.ClipboardManager
import android.content.ContentResolver
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.content.res.Configuration
import android.net.Uri
import android.os.Build
import android.os.Bundle
@@ -29,7 +33,6 @@
import androidx.activity.result.contract.ActivityResultContracts
import androidx.annotation.ColorRes
import androidx.annotation.StringRes
import androidx.collection.ArraySet
import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
@@ -398,22 +401,26 @@
                    var message = "";
                    if(permissions.contains(Manifest.permission.READ_EXTERNAL_STORAGE)){
                        title = "申请文件读取权限";
                        message = "通过文件读取权限后,可无障碍使用图片、音乐、视频并添加到直播的音视频流中"
                        message = "     通过文件读取权限后,可无障碍使用图片类、音乐类、视频类文件,并将读取的文件数据添加到直播中的音视频流中。"
                    }else if(permissions.contains(Manifest.permission.CAMERA)){
                        title = "申请相机权限";
                        message = "通过相机权限后,可将相机画面添加到直播画面流中"
                        message = "     通过相机权限后,可无障碍使用相机及USB采集设备,并将设备采集的画面添加到直播中的视频流中。"
                    }else if(permissions.contains(Manifest.permission.RECORD_AUDIO)){
                        title = "申请话筒权限";
                        message = "通过话筒权限后,可将话筒声音添加到直播声音流中"
                    }else if(permissions.contains(Manifest.permission.READ_MEDIA_IMAGES)){
                        message = "     通过话筒权限后,可无障碍使用话筒设备,并将话筒采集的音频数据添加到直播中的音频流中"
                    }else if(permissions.contains(Manifest.permission.READ_MEDIA_IMAGES) ||
                        permissions.contains(Manifest.permission.READ_MEDIA_VIDEO)){
                        title = "申请图片和视频文件权限";
                        message = "通过图片和视频文件权限后,可将图片和视频画面添加到直播画面流中"
                        message = "     通过图片类和视频类文件权限后,可将读取的图片和视频数据添加到直播中的音视频流中。"
                    }/*else if(permissions.contains(Manifest.permission.READ_MEDIA_IMAGES)){
                        title = "申请图片文件权限";
                        message = "通过图片类文件权限后,可将读取的图片数据添加到直播中的视频流中。"
                    }else if(permissions.contains(Manifest.permission.READ_MEDIA_VIDEO)){
                        title = "申请图片和视频文件权限";
                        message = "通过图片和视频文件权限后,可将图片和视频画面添加到直播画面流中"
                    }else if(permissions.contains(Manifest.permission.READ_MEDIA_AUDIO)){
                        title = "申请视频文件权限";
                        message = "通过视频类文件权限后,可将读取的视频数据添加到直播中的音视频流中。"
                    }*/else if(permissions.contains(Manifest.permission.READ_MEDIA_AUDIO)){
                        title = "申请音频文件权限";
                        message = "通过音频文件权限后,可将音频文件的声音添加到直播声音流中"
                        message = "     通过音频文件权限后,可将音频文件的声音添加到直播中的音频流中"
                    }/*else if(permissions.contains(Manifest.permission.POST_NOTIFICATIONS)){
                        title = "申请通知栏权限";
                        message = "通过通知栏权限后,可开启后台服务,保证相机、话筒、截屏、扬声器等功能不被系统终止"
@@ -468,6 +475,14 @@
        showToast(getString(msg))
    }
    fun copyStr(str:String){
        // 获取系统剪贴板
        val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
        // 创建一个剪贴数据集,包含一个普通文本数据条目(需要复制的数据)
        val clipData = ClipData.newPlainText(null ,str)
        // 把数据集设置(复制)到剪贴板
        clipboard.setPrimaryClip(clipData)
    }
    /**
     * 获取文件保存路径 sdcard根目录/download/文件名称
     * @param fileUrl
@@ -481,6 +496,12 @@
            appDir.mkdirs()
        }
        return storePath + File.separator + fileName
    }
    fun isTabletDevice(): Boolean {
        val uiModeManager = getSystemService(Context.UI_MODE_SERVICE) as UiModeManager
        return (uiModeManager.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION).not() &&
                (resources.configuration.screenLayout and Configuration.SCREENLAYOUT_SIZE_MASK >= Configuration.SCREENLAYOUT_SIZE_LARGE)
    }
    //===========================================
@@ -498,7 +519,7 @@
    }
    fun getBooleanProjectPrefrence(key : String,value : Boolean) : Boolean {
        return PreferencesUtils.getBoolean(this , key , value , PreferencesUtils.USER)
        return PreferencesUtils.getBoolean(this , key , value , PreferencesUtils.PROJECT)
    }
    fun getStringUserPrefrence(key : String) : String {
@@ -506,7 +527,7 @@
    }
    fun getStringUserPrefrence(key : String,value : String?) : String {
        return PreferencesUtils.getString(this , key , value, PreferencesUtils.PROJECT)
        return PreferencesUtils.getString(this , key , value, PreferencesUtils.USER)
    }
    fun getStringProjectPrefrence(key : String) : String {
@@ -542,7 +563,7 @@
    }
    fun getStringSetProjectPrefrence(key : String) : Set<*> {
        return getStringSetProjectPrefrence(key, ArraySet<Any?>() )
        return getStringSetProjectPrefrence(key, HashSet<Any?>() )
    }
    fun getStringSetProjectPrefrence(key : String,value : Set<*>?) : Set<*> {
@@ -574,7 +595,7 @@
    }
    fun getStringSetUserPrefrence(key : String) : Set<*> {
        return getStringSetUserPrefrence(key,ArraySet<Any?>())
        return getStringSetUserPrefrence(key,HashSet<Any?>())
    }
    fun getStringSetUserPrefrence(key : String,value : Set<*>) : Set<*> {