我已经完成了一些代码,除了设置应用程序-> 辅助功能菜单或设备管理应用程序菜单外,其他地方都可以正常工作
我需要在设置-> 可访问性和设备管理应用程序菜单中显示覆盖
我有一个应用程序,我在其中看到这种类型的叠加层,您可以在下图看到
当我打开 ->设备管理应用程序-> 然后我的应用程序覆盖被隐藏但另一个应用程序覆盖仍然可见时,您可以看到上面的第二张图像我不知道为什么?
请大家帮我解决这个问题??
**AndridManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.xxxxx">
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.ACTION_MANAGE_OVERLAY_PERMISSION" />
<application
.....
.....
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".OverlayService" />
</application>
</manifest>
import android.content.Intent
import android.graphics.PixelFormat
import android.os.Build
import android.os.IBinder
import android.view.*
class OverlayService : Service() {
private var windowManager: WindowManager? = null
private var view: View? = null
override fun onBind(intent: Intent): IBinder? {
return null
}
override fun onCreate() {
super.onCreate()
val layoutParamsType: Int = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
} else {
WindowManager.LayoutParams.TYPE_PHONE
}
val params = WindowManager.LayoutParams().apply {
width = WindowManager.LayoutParams.MATCH_PARENT
height = WindowManager.LayoutParams.WRAP_CONTENT
type = layoutParamsType
flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
format = PixelFormat.TRANSLUCENT
}
params.gravity = Gravity.CENTER or Gravity.START
val inflater = getSystemService(LAYOUT_INFLATER_SERVICE) as LayoutInflater
view = inflater.inflate(R.layout.overlay_view, null)
windowManager = getSystemService(WINDOW_SERVICE) as WindowManager
windowManager!!.addView(view, params)
}
override fun onDestroy() {
super.onDestroy()
if (view != null) {
windowManager!!.removeView(view)
view = null
}
}
}
MainActivity.kt
import android.content.Intent
import android.os.Bundle
import android.provider.Settings
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.net.toUri
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
if (Settings.canDrawOverlays(this)) {
startService(Intent(this, OverlayService::class.java))
} else {
startManageDrawOverlaysPermission()
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
REQUEST_CODE_DRAW_OVERLAY_PERMISSION -> {
if (Settings.canDrawOverlays(this)) {
startService(Intent(this, OverlayService::class.java))
} else {
Toast.makeText(this, "Permission is not granted!", Toast.LENGTH_SHORT).show()
}
}
}
}
private fun startManageDrawOverlaysPermission() {
Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, "package:${packageName}".toUri()).apply {
startActivityForResult(this, REQUEST_CODE_DRAW_OVERLAY_PERMISSION)
}
}
companion object {
private const val REQUEST_CODE_DRAW_OVERLAY_PERMISSION = 5
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Show !"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
覆盖视图.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:background="#00897B"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Overlay Example View"
android:textColor="@color/white" />
</LinearLayout>