2017-02-27 38 views
1

我在應用程序收到fcm通知時顯示自定義視圖有困難。 我成功地顯示收到的fcm通知給android的通知列表。 但我也希望fcm消息作爲自定義視圖顯示在屏幕上(自上而下,幾秒鐘後消失),而不管應用狀態如前景,背景或死亡。如何在應用程序收到fcm通知時顯示自定義頂部/底部視圖

我該如何解決我的問題? 先進的謝謝!

+0

嘗試使用服務這一功能 –

+0

您是否嘗試過'Notification.Builder'? –

回答

0

我猜你需要實現PopupWindow有在this doc

我要展示一個樣品的情況下,這樣你可以瞭解一個簡短的想法。

假設你對你的Viewlayout是custom_layout.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/rl_custom_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:padding="2dp" 
    android:background="#ab2fc4" 
> 
    <ImageButton 
     android:id="@+id/ib_close" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="@drawable/ic_close_white_24dp" 
     android:layout_alignParentEnd="true" 
     android:layout_alignParentRight="true" 
     android:background="@null" 
    /> 
    <TextView 
     android:id="@+id/tv" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="This is a sample popup window." 
     android:layout_centerInParent="true" 
     android:padding="25sp" 
    /> 
</RelativeLayout> 

然後在你要處理的雲消息,你只需要添加此代碼段

LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); 

      // Inflate the custom layout/view 
      View customView = inflater.inflate(R.layout.custom_layout,null); 


      // Initialize a new instance of popup window 
      mPopupWindow = new PopupWindow(
        customView, 
        LayoutParams.WRAP_CONTENT, 
        LayoutParams.WRAP_CONTENT 
      ); 

      // Set an elevation value for popup window 
      // Call requires API level 21 
      if(Build.VERSION.SDK_INT>=21){ 
       mPopupWindow.setElevation(5.0f); 
      } 

      // Get a reference for the custom view close button 
      ImageButton closeButton = (ImageButton) customView.findViewById(R.id.ib_close); 

      // Set a click listener for the popup window close button 
      closeButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        // Dismiss the popup window 
        mPopupWindow.dismiss(); 
       } 
      }); 

在這種情況下,你可以點擊關閉您的mPopupWindow。如果您想自動關閉它,請使用Handler使用其postDelayed()方法。 要知道如何實現其與Handler看到這個answer

從這個blog.

希望這有助於我得到的幫助!

+0

正如我所做的答案一樣,但通知列表的視圖已應用。那不是我想要的。我想要在屏幕上顯示新的自定義視圖,無論何時我使用其他應用程序或Android家庭等等。 – Dennis

+0

對不起,我的壞!但是現在我明白了你的觀點。所以你想要一個彈出窗口來顯示? –

+0

請檢查我編輯的答案 –

0

您可以使用下面的代碼,使自定義視圖:

Notification notification = new Notification(icon, "Custom Notification", when); 

     NotificationManager mNotificationManager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE); 

     RemoteViews contentView = new RemoteViews(getPackageName(), R.layout.custom_notification); 
     contentView.setImageViewResource(R.id.image, R.drawable.ic_launcher); 
     contentView.setTextViewText(R.id.title, "Custom notification"); 
     contentView.setTextViewText(R.id.text, "This is a custom layout"); 
     notification.contentView = contentView; 

     Intent notificationIntent = new Intent(this, MainActivity.class); 
     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0); 
     notification.contentIntent = contentIntent; 

     notification.flags |= Notification.FLAG_NO_CLEAR; //Do not clear the notification 
     notification.defaults |= Notification.DEFAULT_LIGHTS; // LED 
     notification.defaults |= Notification.DEFAULT_VIBRATE; //Vibration 
     notification.defaults |= Notification.DEFAULT_SOUND; // Sound 

     mNotificationManager.notify(1, notification); 
+0

正如我所做的答案一樣,但通知列表的視圖已應用。那不是我想要的。我想要在屏幕上顯示新的自定義視圖,無論何時我使用其他應用程序或Android家庭等等。 – Dennis

+0

根據我的理解,我覺得你想在收到通知後重定向到新的自定義視圖?這是你想要實現的嗎? –

+0

是的,如果應用程序收到通知,我希望通知最初顯示在通知列表中,並且還希望通知在自定義視圖的屏幕上顯示。 – Dennis

相關問題