我想在Lockscreen前面显示一个Activity。我在onCreate方法中尝试使用此代码:
super.onCreate(savedInstanceState);
Window window = getWindow();
window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
setContentView(R.layout.test);
这适用于在整个屏幕上显示的活动,但我想构建一个只有200px高度的活动。我以为我可以将它与这段代码相匹配:
super.onCreate(savedInstanceState);
Window window = getWindow();
LayoutParams layout = new WindowManager.LayoutParams();
layout.copyFrom(window.getAttributes());
layout.height = 200;
window.setAttributes(layout);
window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
setContentView(R.layout.test);
但是锁定屏幕前面的活动不可见。如果我解锁手机,则直接显示活动。任何想法为什么以及如何解决这个问题?
编辑:我认为它与窗口浮动FLAG有关。如果设置了这个标志(并且我认为当我改变大小时),则活动不会显示在锁屏上。但这只是一种推定。有任何想法或解决方法来解决这个问题吗?
答案 0 :(得分:0)
我在设计音乐播放器时遇到了类似的要求。我最终为锁屏小部件做的最后是:
您可以从Google Play下载我的音乐播放器“Fusion Music Player”来查看它
答案 1 :(得分:0)
首先保存到首选项Keyguard
instanse。
之后 - 在手机上以编程方式禁用默认锁屏。
然后,实现Service
,当电话进入锁定状态时捕获。
当SCREEN_ON
检查堆栈中的活动时,如果她存在则显示她,否 - 由singleTask
启动。
这是在Lockscreen上实现Activity的一种方法。因为谷歌拒绝化妆锁屏,任何操纵都是黑客的。
您可以制作小部件并将其置于锁定屏幕或以下方式。
仅供参考:google it 我对Android的锁定(来自code.google.com)
答案 2 :(得分:0)
最后我实现了同样的目标。不要去活动,因为安全原因,android不会在你的活动后面显示锁屏,所以对于服务。
以下是我服务的onStartCommand中的代码
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
View mView = mInflater.inflate(R.layout.score, null);
WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
/* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
PixelFormat.RGBA_8888);
mWindowManager.addView(mView, mLayoutParams);
答案 3 :(得分:-1)
您最好的选择是创建一个填充屏幕的View
,但除了您想要的部分之外,其他地方都有透明背景。
这可以通过在文件res/values/styles.xml
中定义自定义主题来实现(最初显示在How do I create a transparent Activity on Android?上):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Transparent" parent="android:Theme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
</resources>
然后将此主题添加到Activity
的清单声明中:
android:theme="@style/Theme.Transparent"
接下来,您可以通过添加此R.layout.lockscreen
文件为此活动创建布局(XML
)。在这里指定高度(以像素为单位):
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<FrameLayout
android:layout_width="match_parent"
android:layout_height="200px"
android:centerInParent="true" >
<include layout="@layout/test" /> <!-- This points to your R.layout.test layout. -->
</FrameLayout>
</RelativeLayout>
最后,只需使用上面显示的第一种方法来显示活动:
super.onCreate(savedInstanceState);
Window window = getWindow();
window.addFlags(LayoutParams.FLAG_SHOW_WHEN_LOCKED);
setContentView(R.layout.lockscreen);