![](/img/trans.png)
[英]Android - Activity is starting from handler after sometime of pressing home button
[英]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.