mkl*_*mkl 5 service android presentation
我正在开发一个项目,该项目应在辅助显示屏上显示一些演示文稿(API 4.2).直到现在一切正常.但是,如果我关闭应用程序,我无法阻止演示文稿被关闭.我想创建一个正在启动后台服务的应用程序,该服务正在初始化演示文稿.这样用户只需在状态栏中看到通知图标,但服务正在将内容流式传输到辅助显示器.
任何想法,如果这可以实现?我尝试使用backgroundservice,但不知道我应该使用哪种上下文.尝试过
getApplicationContext()
Run Code Online (Sandbox Code Playgroud)
但后来我得到一个例外:
Unable to add window -- token null is not for an application
Run Code Online (Sandbox Code Playgroud)
如果我使用静态方法getAppContext()(我知道这样一个丑陋的黑客),它将显示演示文稿,但如果我关闭应用程序也会隐藏它.
有任何想法吗?
小智 7
创建一个使用Context.createDisplayContext(显示)的服务来获取辅助显示的新窗口管理器 - 这就是Presentation的工作原理
以这个链接为例:http: //www.java2s.com/Open-Source/Android/android-core/platform-frameworks-base/com/android/server/LoadAverageService.java.htm
在onCreate()而不是获取WindowManagerImpl:
public void onCreate(){
...
WindowManagerImpl wm = (WindowManagerImpl)getSystemService(WINDOW_SERVICE);
wm.addView(mView, params);
}
Run Code Online (Sandbox Code Playgroud)
调用这样的方法:
private void addView(WindowManager.LayoutParams params){
DisplayManager dm = (DisplayManager) getApplicationContext().getSystemService(DISPLAY_SERVICE);
if (dm != null){
Display dispArray[] = dm.getDisplays();
if (dispArray.length>0){
Context displayContext = getApplicationContext().createDisplayContext(dispArray[1]);
WindowManager wm = (WindowManager)displayContext.getSystemService(WINDOW_SERVICE);
wm.addView(mView, params);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您的视图将添加到辅助显示中,由于此操作由服务运行,因此您在主显示屏上运行的活动不会暂停
任何想法,如果这可以实现?
由于Presentation是子类Dialog,Presentation因此只有当您在前台托管它时才能看到它.
UPDATE
icarmel的答案有效,但缺少一些细节.我PresentationService现在在我的CWAC-Presentation库中提供了该技术的完整工作实现.要回答我在我的icarmel的答复意见的问题,您使用WindowManager.LayoutParams.TYPE_SYSTEM_ALERT的WindowManager.LayoutParams,而这又需要SYSTEM_ALERT_WINDOW许可(不幸).
| 归档时间: |
|
| 查看次数: |
3713 次 |
| 最近记录: |