簡體   English   中英

按主頁按鈕后從系統覆蓋窗口啟動活動

[英]Starting an Activity from a system overlay window after pressing home button

我有一個系統覆蓋窗口,像Facebook的聊天頭一樣的浮動視圖。

當用戶按下窗口時,將啟動一個活動以顯示內容。

問題是,如果用戶通過按主頁按鈕離開我的應用程序,則由於系統限制,無法在5秒內啟動活動( https://code.google.com/p/android/issues/detail?id=4536 )。 活動在5秒后顯示。

我之前的SO問題沒有找到任何解決方案。 然而,有一個應用程序, Link Bubble ,它克服了這個問題。 當用戶按下浮動氣泡視圖時,活動總是可以立即彈出。

有誰知道如何做到這一點?

這是我系統覆蓋窗口的LayoutParams:

windowParams = new WindowManager.LayoutParams(
            width, height,
            WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
            WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED | 
               WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | 
                   WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
            PixelFormat.TRANSLUCENT);

windowParams.gravity = Gravity.TOP | Gravity.LEFT;
windowParams.x = 0;
windowParams.y = 0;

我得到了WindowManager

windowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);

並添加浮動視圖

windowManager.addView(MY_VIEW, windowParams);

其中MY_VIEW有一個OnTouchListener,在用戶按下它后啟動一個Activity。

此問題的一種可能解決方法是將Home / Launcher intent過濾器添加到您嘗試啟動的活動。 你可以通過添加它來做到這一點

<intent-filter>

    <!-- The following two intent-filters are the key to set homescreen -->
    <category android:name="android.intent.category.HOME" />   
    <category android:name="android.intent.category.DEFAULT" /> 


</intent-filter>

執行此操作時,用戶基本上可以選擇將應用程序用作主屏幕。 無論何時開始活動,這都將導致無延遲。 這是此問題最接近無根的解決方案。

更新

另一種可能的解決方案是具有中間輔助活動,該輔助活動又具有startActivity()。 這將繞過5秒的延遲。 確保中間活動具有透明布局,以避免混淆用戶。

首先,在啟動器活動中添加此項。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(false);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

然后,將其添加到AndroidManifest.xml中的疊加層活動中。

android:launchMode="singleInstance"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM