5

我正在做一个项目,该项目应该在辅助显示器(API 4.2)上显示一个小演示。到目前为止一切正常。但是,如果我关闭应用程序,我将无法阻止演示文稿被关闭。我想创建一个应用程序,它正在启动一个正在初始化演示文稿的后台服务。这样用户只会在状态栏中看到一个通知图标,但服务正在将内容流式传输到辅助显示器。

如果这可以实现,有什么想法吗?我用后台服务尝试过,但不知道我应该使用哪个上下文。试过了

getApplicationContext()

但后来我得到了一个例外:

Unable to add window -- token null is not for an application

如果我使用像这样的静态方法getAppContext()(我知道这样一个丑陋的黑客),它将显示演示文稿,但如果我关闭应用程序也会隐藏它。

有任何想法吗?

4

2 回答 2

8

创建一个使用 Context.createDisplayContext(Display) 为您的辅助显示获取新窗口管理器的服务 - 这就是 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); 
}

调用这样的方法:

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);
        }
    }
}

您的视图将被添加到辅助显示屏,并且由于它由服务运行,因此您在主显示屏上运行的活动不会暂停

于 2013-04-30T19:13:56.593 回答
5

如果这可以实现,有什么想法吗?

由于Presentation是 的子类,因此只有当您将活动托管在前台时Dialog,您Presentation才能看到它。


更新

icarmel 的答案有效,尽管它缺少一些细节。我的CWAC-Presentation 库中有一个PresentationService现在提供该技术的完整工作实现。要在我对 icarmel 答案的评论中回答我的问题,请使用in ,这又需要许可(不幸的是)。WindowManager.LayoutParams.TYPE_SYSTEM_ALERTWindowManager.LayoutParamsSYSTEM_ALERT_WINDOW

于 2013-04-22T13:26:27.033 回答