我們從啓動服務的活動開始,然後變爲空閒狀態,直到服務再次調用活動爲止。該活動去onPause(我相信),並不會開始備份,直到其BroadcastReceiver獲得其呼叫開始。我的服務創建一個WindowManager作爲系統覆蓋層,當用戶觸發它時,它應該調用該活動並使活動創建一個新的視圖,其中包含一些內容。那麼一切都會順利進行,沒有錯誤彈出窗口,我的所有日志都表明代碼運行順利,但應該做出的新視圖永遠不會被看到。有趣的是,如果你點擊應用程序重新啓動它,彈出我以前想要的視圖。所以我很好奇,爲什麼它不會在我想要的時候發生,但是它仍然是不可見的。我已經嘗試將視圖設置爲可見,嘗試bringToFront(),我甚至嘗試了一些標誌意圖將活動帶到棧頂,但沒有任何工作。相關代碼如下。在製作WindowManager之後使用setContentView()問題
我不是在這裏聽說爲什麼你不認爲我的應用程序對用戶有好處,或者你不認爲它遵循android設計「設計」我只是想幫助調試這個有趣的錯誤。
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);
}
清單,因爲,因爲
而這個調用將工作,我不想訪問figureOutParam,直到它從服務調用。和它的問題是,當服務調用它時,一切順利,但我在figureOutParam中的視圖不可見(即使我將它設置爲可見並將其設置爲bringToFront())。所以是的,這將工作,但它不會幫助我的代碼 –