栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

android 悬浮窗的检查

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

android 悬浮窗的检查

1、判断悬浮窗是否打开
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            val canDrawOverlays = Settings.canDrawOverlays(this)
            Log.d(TAG, "onCreate:canDrawOverlays=$canDrawOverlays ")
            findViewById(R.id.status).text = "是否可悬浮在其他app上:${canDrawOverlays.toString()}"
        }
2.Settings.canDrawOverlays(this)
 
    public static boolean canDrawOverlays(Context context) {
        return Settings.isCallingPackageAllowedToDrawOverlays(context, Process.myUid(),
                context.getOpPackageName(), false) || context.checkSelfPermission(
                Manifest.permission.SYSTEM_APPLICATION_OVERLAY)
                == PackageManager.PERMISSION_GRANTED;
    }
    

检查指定的context是否可以绘制到其他app之上,从23开始,要出现悬浮框,必须注册权限SYSTEM_alert_WINDOW,并且用户要明确授权此意图。要提示用户授予此批准,应用程序必须发送带有操作的意图。
Settings#ACTION_MANAGE_OVERLAY_PERMISSION 跳转到系统显示管理权限的界面


如果不注册SYSTEM_alert_WINDOW权限,在系统中悬浮窗配置列表中,会找不到自己的应用。

3.code
class MainActivity : AppCompatActivity() {
    private val PermissionRequestCode = 11111
    private var activityResultLauncher: ActivityResultLauncher? = null
    private val TAG = "MainActivity"

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
         activityResultLauncher =
            registerForActivityResult(ActivityResultContracts.StartActivityForResult(), object :
                ActivityResultCallback {
                override fun onActivityResult(result: ActivityResult?) {
                    //接收回调,更新状态
                    updateStatus()
                }
            })

        findViewById
4. java.lang.IllegalStateException: LifecycleOwner com.xx.MainActivity@28b4e79 is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.

registerForActivityResult 要提前初始化,准备来说要在activity的start()结束之前初始化

 java.lang.IllegalStateException: LifecycleOwner com.example.testoverlaypermission.MainActivity@28b4e79 is attempting to register while current state is RESUMED. LifecycleOwners must call register before they are STARTED.
        at androidx.activity.result.ActivityResultRegistry.register(ActivityResultRegistry.java:123)
        at androidx.activity.ComponentActivity.registerForActivityResult(ComponentActivity.java:682)
        at androidx.activity.ComponentActivity.registerForActivityResult(ComponentActivity.java:691)
        at com.example.testoverlaypermission.MainActivity.onCreate$lambda-1(MainActivity.kt:28)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/704913.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号