在制作WindowManager之后使用setContentView()的问题

时间:2013-10-07 04:57:12

标签: android android-layout android-intent android-activity android-service

我们从一个启动服务的活动开始,然后变为空闲,直到服务再次调用该活动。活动进入onPause(我相信)并且直到它的BroadcastReceiver开始调用它才开始备份。我的服务创建一个WindowManager作为系统覆盖,当用户触发它时,它应该调用该活动并使活动创建一个包含其中一些内容的新视图。好吧,一切都顺利通过,没有错误弹出,我的所有日​​志都表明代码顺利运行,但应该制作的新视图永远不会出现。有趣的是,如果您单击该应用程序再次启动它,则会弹出我之前想要的视图。所以我很好奇为什么它不会发生在我想要的时候,但相反它仍然是看不见的。我已经尝试将视图设置为可见,尝试了bringToFront(),我甚至在意图上尝试了一些标志,将活动带到堆栈的顶部但没有一个工作。相关代码如下。

我不是在这里听到为什么你不认为我的应用程序对用户有好处,或者你认为它不符合orroids base“design”我只想帮助调试这个有趣的bug。

MainActivity

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = new Intent(MainActivity.this, MyService.class);
        startService(intent); //if i comment out these lines and add the call
        initService(); //to figureOutParam below it works perfectly
        sendUserHome(); //this one as well
        figureOutParam("UPDATE",0); //this is the call that i use to get through to
                         //the method though right now neither param is important
    }


    public void figureOutParam(String param, int top){

        if(param.equals("UPDATE")){

            View myView = new View(this);

            LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
            myView = inflater.inflate(R.layout.activity_main, null);
            myView.setBackgroundColor(Color.BLUE);
            myView.bringToFront();

            setContentView(myView);
        }
    }

MyService(仅涉及回拨服务的重要部分)

 @Override
    public void onCreate() {
        super.onCreate();

        WindowManager window = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
        Display d = window.getDefaultDisplay();
        int width=d.getWidth();
        int height=d.getHeight();
        height= (int)(height*.025);


        params = new WindowManager.LayoutParams(WindowManager.LayoutParams.FILL_PARENT,height,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL|
                WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | 
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, 
                PixelFormat.TRANSLUCENT);
        params.gravity=Gravity.BOTTOM;
    wm = (WindowManager) getSystemService(WINDOW_SERVICE);

    }

    public void updateView(String params){
            Intent i = new Intent(MY_INTENT);
            i.putExtra("y", this.y);
            i.putExtra("param", params);
            sendBroadcast(i);
        }

显示因为,因为                                                                                                                         

1 个答案:

答案 0 :(得分:0)

尝试在figureOutParam("UPDATE",0);之后插入super.onCreate(savedInstanceState);