小编Nik*_*lay的帖子

为什么在Android O方法中当用户授予绘制叠加层并返回我的应用程序的权限时,Settings.canDrawOverlays()会返回"false"?

我有父母的MDM应用程序来控制孩子的设备,它使用权限SYSTEM_ALERT_WINDOW在禁止的动作执行时在孩子的设备上显示警告.在安装期间的设备M +上,应用程序使用以下方法检查权限:

Settings.canDrawOverlays(getApplicationContext()) 
Run Code Online (Sandbox Code Playgroud)

如果此方法返回false应用程序打开系统对话框,用户可以在其中授予权限:

Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
                    Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)

Android O中,当用户成功授予权限并通过按返回按钮返回应用程序时,方法canDrawOverlays()仍会返回false,直到用户不关闭应用程序并再次打开它或在最近的应用程序对话框中选择它.我在Android Studio中使用Android O在最新版本的虚拟设备上进行了测试,因为我没有真正的设备.

我做了一些研究,另外用AppOpsManager检查权限:

AppOpsManager appOpsMgr = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
int mode = appOpsMgr.checkOpNoThrow("android:system_alert_window", android.os.Process.myUid(), getPackageName());
Log.d(TAG, "android:system_alert_window: mode=" + mode);
Run Code Online (Sandbox Code Playgroud)

所以:

  • 当应用程序没有此权限时,模式为"2"(MODE_ERRORED)(canDrawOverlays()返回false)当用户
  • 授予权限并返回给应用程序,模式为"1"(MODE_IGNORED)(canDrawOverlays()返回false)
  • 如果您现在重新打开应用程序,模式为"0"(MODE_ALLOWED)(canDrawOverlays()返回true)

拜托,有人能向我解释这种行为吗?我可以依赖mode == 1操作"android:system_alert_window"并假设用户已授予权限吗?

permissions android

24
推荐指数
4
解决办法
7884
查看次数

在父视图的两侧放置两个宽度为 wrap_content 的多行 TextView

请帮我实现以下两个TextView的排列:

在此处输入图片说明

  1. 左边是一个带标题的简单 TextView,右边是另一个 TextView,左边是一个 Drawable(这很重要,因为我不能使用match_parent)。两个 TextViews 都应该被wrap_content压到他们的身边。
  2. 如果其中一个 TextView 太长,它应该靠在另一个 TextView 上并包装自己的文本。
  3. 如果两个 TextView 都很长,那么它们应该占用相同的空间。它们都不应该被推到父视图之外。

layout android textview android-constraintlayout

7
推荐指数
2
解决办法
278
查看次数