我正在开发一个SDK,它WindowManager使用TYPE_TOAST LayoutParams类型放置弹出视图.最新版本的Android Nougat(7.1.1)做了一些更改WindowManager(我还不知道究竟有什么变化 - 如果有人可以详细说明会很感激)但是这个更改会导致所有添加了TYPE_TOAST类型的视图被删除从活动过渡后的窗口.
我无法添加任何权限请求,因此我无法使用需要SYSTEM_ALERT_WINDOW权限的类型.
尝试在每次转换后添加视图,但这些视图几乎在我添加后立即删除.(再次,我猜测是因为做了一些改变WindowManager)
所以问题是:只要应用程序处于活动状态并且在前台上,是否有人知道我可以使用一些替代方法将弹出视图显示为应用程序上的叠加层?
android overlay view android-windowmanager android-7.1-nougat
今天我安装了最新版本的Android Studio
我正在学习Android中的Floating Widgets
我开始应用这个例子
https://www.spaceotechnologies.com/android-floating-widget-tutorial/
它汇编好了
但是当我在模拟器中运行它时会崩溃
给我这个错误
08-28 22:52:02.932 7400-7400/com.asmgx.MyApp.MyApp E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.asmgx.MyApp.MyApp, PID: 7400
java.lang.RuntimeException: Unable to create service com.asmgx.MyApp.MyApp.FloatWidgetService: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@7c93828 -- permission denied for window type 2002
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3544)
at android.app.ActivityThread.access$1300(ActivityThread.java:199)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1666)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@7c93828 -- permission denied for window type 2002
at android.view.ViewRootImpl.setView(ViewRootImpl.java:822)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
at …Run Code Online (Sandbox Code Playgroud) 我想制作一个覆盖整个屏幕的覆盖屏幕,包括状态栏和导航栏。
我花了几个小时的谷歌搜索/研究仍然没有运气。
这是我的代码:
MainActivity.java(启动器):
package com.blogspot.diannaoxiaobai.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
startActivity(new Intent(this, Main2Activity.class));
}
}
Run Code Online (Sandbox Code Playgroud)
活动_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.blogspot.diannaoxiaobai.myapplication.MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
Main2Activity.java(由MainActivity启动):
package com.blogspot.diannaoxiaobai.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
public class Main2Activity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) …Run Code Online (Sandbox Code Playgroud) android overlay android-theme android-overlay android-statusbar
我想在锁屏上显示个性化视图(实时显示一些数据)(之后用户将手机锁定在活动上)。
谷歌地图和百度地图(以及其他一些我忘记名字的应用)已经完全实现了我想要的。
所以我试图在我的 BroadcastReceiver 被触发时添加一个视图。
我从这个答案和这个答案中尝试了一些观点。我也试过这个。
在我根据许可出现错误之前:
窗口类型 2XXX 的权限被拒绝
现在我没有任何错误,但我的视图没有显示。
我的情况是:
MainActivity.kt:
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import android.provider.Settings
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
private val REQUEST_CODE = 10001
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
checkDrawOverlayPermission()
}
fun checkDrawOverlayPermission() {
/** check if we already have permission to draw over other apps */
if (!Settings.canDrawOverlays(this)) {
/** if not construct intent to request permission */
val intent = …Run Code Online (Sandbox Code Playgroud) android lockscreen android-view android-windowmanager android-permissions