2012-01-02 71 views
17

我想創建一個定製的彈出式通過android的來電屏幕,我希望爲用戶添加信息。 我希望彈出窗口不會禁用背景中的任何可點擊性,以便用戶仍可以應答呼叫。來電屏幕彈出

我知道這是可能的,因爲許多應用程序都這樣做,例如, MeZeZe appenter image description here

一些更多的信息

  1. 半透明的主題沒有工作,因爲它取消了前一種行爲的可點擊。
  2. 吐司不是一種選擇 - 我不希望它消失。
  3. 我知道有很多類似的線程 - 我讀了很多,沒有回答我的具體問題。
  4. 我已經知道如何在呼叫接收時「發生某些事情」,因此不需要INCOMING_CALL活動提示。

希望有任何幫助! 感謝

+0

您能否請分享您的工作方式。比你 – png 2012-06-06 11:06:06

+0

你能分享你的解決方案嗎?也許在github上?謝謝! – asheinfeld 2013-01-12 00:11:43

+0

我會分享我的解決方案,當我開始工作時,不能離開家。對不起:D – Guy 2013-01-12 16:35:19

回答

11

如果你想保持通話活動還是點擊,但不會對您覆蓋任何控件,您可以通過調用

getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 

在活動的onCreate()方法是做到這一點通過電話顯示。

佈局參數與其一起可用的有:

android:windowBackground="@android:color/transparent" 
android:windowIsTranslucent="true" 
android:windowAnimationStyle="@android:style/Animation.Translucent" 
+0

謝謝!有一點補充。將其添加到您的回覆中,以便答案完整。並在評論中的代碼是不好:) – Guy 2012-01-05 08:35:30

+0

有什麼辦法可以控制整個屏幕,所以我有一個自定義的傳入屏幕? – user1163234 2012-03-05 12:31:57

+0

嗨,我有一個問題。如果我在我的應用程序中接到電話(即我的應用程序中某個活動的任何視圖都處於焦點狀態),則無法正常工作。 Android的來電屏幕來了,消失了,我的應用程序活動窗口顯示,無論屏幕覆蓋我在做什麼,這也是可見的。請幫忙 – png 2012-06-06 11:04:56

0

這與一些補充工作對我來說:

在廣播接收器添加以下行的意圖:

 i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 

此外,我在啓動PopupWindow活動之前添加了大約1.5秒的延遲時間,以確保它在來電系統屏幕之後到來。

清單文件我加:

<activity android:name=".PopUpIncomingCallActivity" 
      android:theme="@android:style/Theme.Translucent"> 

</activity> 

確保彈出屏幕的佈局是半透明的。

在Popupscreen佈局xml文件添加以下propperties:

android:windowAnimationStyle="@android:style/Animation.Translucent" 
    android:windowBackground="@android:color/transparent" 
    android:windowIsTranslucent="true" 

然而,這種解決方案仍然有一個缺點:

出現來電呼叫系統屏幕上方的彈出畫面,因此用戶具有執行操作(例如點擊按鈕,按下按鍵或觸摸屏幕)以關閉彈出屏幕,因爲來電屏幕保持在下方,並且在彈出屏幕關閉之前無法訪問。

0

它不僅會顯示鎖定屏幕上的活動,還會允許在活動屏幕後面接收來電。

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    final Window win = getWindow(); 
    win.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
      | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); 
    win.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
      | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); 
    win.addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); 

    setContentView(R.layout.activity_main);