1

我想通知打开Notification.class活动,而不是MainActivity。我已将代码更改为:打开通知活动时点击通知与firebase

Intent intent = new Intent(this, Notification.class); 

但仍然在收到通知并单击它时打开MainActivity。 我看了很多例子,但无法得到我需要更改以获取另一个活动而不是MainActivity的位置。

通知从Firebase控制台作为用户段发送。

import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Color; 
import android.media.RingtoneManager; 
import android.net.Uri; 
import android.support.v4.app.NotificationCompat; 
import android.util.Log; 

import com.firebase.jobdispatcher.FirebaseJobDispatcher; 
import com.firebase.jobdispatcher.GooglePlayDriver; 
import com.firebase.jobdispatcher.Job; 
import com.google.firebase.messaging.FirebaseMessagingService; 
import com.google.firebase.messaging.RemoteMessage; 

public class MyFirebaseMessagingService extends FirebaseMessagingService { 

    private static final String TAG = "MyFirebaseMsgService"; 

    /** 
    * Called when message is received. 
    * 
    * @param remoteMessage Object representing the message received from Firebase Cloud Messaging. 
    */ 
    // [START receive_message] 
    @Override 
    public void onMessageReceived(RemoteMessage remoteMessage) { 
       // TODO(developer): Handle FCM messages here. 
     Log.d(TAG, "From: " + remoteMessage.getFrom()); 

     // Check if message contains a data payload. 
     if (remoteMessage.getData().size() > 0) { 
      Log.d(TAG, "Message data payload: " + remoteMessage.getData()); 

      if (/* Check if data needs to be processed by long running job */ true) { 
       // For long-running tasks (10 seconds or more) use Firebase Job Dispatcher. 
       scheduleJob(); 
      } else { 
       // Handle message within 10 seconds 
       handleNow(); 
      } 

     } 

     // Check if message contains a notification payload. 
     if (remoteMessage.getNotification() != null) { 
      Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody()); 
     } 


    } 

    private void scheduleJob() { 
     // [START dispatch_job] 
     FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(this)); 
     Job myJob = dispatcher.newJobBuilder() 
       .setService(MyJobService.class) 
       .setTag("my-job-tag") 
       .build(); 
     dispatcher.schedule(myJob); 
     // [END dispatch_job] 
    } 

    /** 
    * Handle time allotted to BroadcastReceivers. 
    */ 
    private void handleNow() { 
     Log.d(TAG, "Short lived task is done."); 
    } 

    /** 
    * Create and show a simple notification containing the received FCM message. 
    * 
    * @param messageBody FCM message body received. 
    */ 
    private void sendNotification(String messageBody) { 
     Intent intent = new Intent(this, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
       PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.notification_bg) 
       .setContentTitle("FCM Message") 
       .setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 }) 
       .setLights(Color.RED, 3000, 3000) 
       .setContentText(messageBody) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    } 
} 
+0

您可以添加用于发送通知的代码吗? –

+0

您正在使用的意图属于'MainActivitiy.class'。在你的代码中,在'sendNotification()'内部看到这一行:'Intent intent = new Intent(this,MainActivity.class);'。将其更改为'Notification.class' – ZeekHuge

+0

我现在通过Firebase发送通知, 是的,我已将其更改为意图intent = new Intent(this,Notification.class);仍然mainActivity显示 –

回答

3

或许是,改变意图是:

Intent intent = new Intent(this, Notification.class); 

所以要澄清火力控制台不可能只从API开放比MainActivity其他活动。

为什么

因为两件事情。

一个

从控制台发出的通知不火onMessageReceived()。

两个

的火力cosole通知没有possibily设置点击动作。

的方式来解决

从API并设置click_actions发送通知。

实施例:

<?php 



#API access key from Google API's Console 



    define('API_ACCESS_KEY', 'YOUR_API_KEY'); 



    $topic = "/topics/todos"; 



$url = 'https://fcm.googleapis.com/fcm/send'; 

$fields = array (

     'to' => $topic, 

     'notification' => array (

       "body" => "nova casa adicionada", 

       "title" => "Nova casa", 

       "sound"=> "default", 

       "click_action"=> "Notification" 

     ), 

     'data' => array(

      "localcasa" => "Porto", 

      "precocasa"=> "1.600.000 €", 

      "imgurl"=> "http://brunoferreira.esy.es/imgsandroid/casa10.jpg", 

      "infocs"=> "Apartamento localizado em local premium da cidade do Porto, à Avenida Marechal Gomes da Costa, onde pode viver-se com toda a calma e descontração. No ponto mais elevado da Foz, com vista de mar e uma envolvente de luxo, rodeado por moradias, com exteriores amplos e vistas deslumbrantes. É constituída por 4 quartos, 5 casas de banho e uma garagem em que tem a capacidade para 2 carros.", 

      "csid"=> "10" 

     ) 

); 

$fields = json_encode ($fields); 

$headers = array (

     'Authorization: key=' . API_ACCESS_KEY, 

     'Content-Type: application/json' 

); 



$ch = curl_init(); 

curl_setopt ($ch, CURLOPT_URL, $url); 

curl_setopt ($ch, CURLOPT_POST, true); 

curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers); 

curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true); 

curl_setopt ($ch, CURLOPT_POSTFIELDS, $fields); 



$result = curl_exec ($ch); 

curl_close ($ch); 



?> 

而设置click_动作,在Android清单组这里面通知actifity

<intent-filter> 
       <action android:name="Notification" /> 

       <category android:name="android.intent.category.DEFAULT" /> 

      </intent-filter> 
+0

试图不工作 –

+0

我我的答案更新您的问题的解释@DreamDeveloper –

+0

任何有用的resouces,我可以让API –

0

JSON从服务器发送到应用程序

{ 

    "notification": { 
    "title": "Title", 
    "text": "notification", 
    "icon": "ic_launcher", 
    "click_action": "NOTIFICATION_ACTIVITY" 
    } 
} 

把这个在Android的Menifest:

<activity 
      android:name=".acitivy.MainActivity" 
      android:screenOrientation="portrait" 
      android:theme="@style/AppTheme" > 

     <intent-filter> 
      <action android:name="NOTIFICATION_ACTIVITY" /> 

      <category android:name="android.intent.category.DEFAULT"/> 
     </intent-filter> 

</activity> 

而在你MyFirebaseMessagingService。在sendNotification的方法类中添加以下内容:

private void sendNotification(RemoteMessage remoteMessage, String messageBody) { 
    Intent intent = new Intent(this, MainActivity.class); 

    **//Add this line** 
    Map<String, String> extra = remoteMessage.getData(); 
    for (Map.Entry<String, String> entry : extra.entrySet()) { 
     intent.putExtra(entry.getKey(), entry.getValue()); 
    } 

    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); 

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
      .setDefaults(Notification.DEFAULT_ALL) 
      .setSmallIcon(Build.VERSION.SDK_INT > 20 ? R.drawable.notification_icon_white : R.mipmap.ic_launcher_normal) 
      //.setLargeIcon(Build.VERSION.SDK_INT > 20 ? BitmapFactory.decodeResource(getResources(), R.drawable.notification_icon_white) : BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher_normal)) 
      .setContentTitle(getString(R.string.app_name)) 
      .setDefaults(NotificationCompat.DEFAULT_SOUND | NotificationCompat.DEFAULT_VIBRATE | NotificationCompat.DEFAULT_LIGHTS) 
      .setColor(ContextCompat.getColor(this, R.color.colorPrimary)) 
      .setPriority(Notification.PRIORITY_HIGH) 
      .setContentText(messageBody) 
      .setAutoCancel(true) 
      .setStyle(new NotificationCompat.BigTextStyle().bigText(messageBody)) 
      .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND) 
      .setSound(defaultSoundUri) 
      .setContentIntent(pendingIntent); 

    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationBuilder.build().flags |= Notification.FLAG_AUTO_CANCEL; 
    notificationManager.notify(getID(), notificationBuilder.build()); 
} 
0

sendNotifcation方法修改代码。正如您所看到的,您已经写入了MainAcitivity.class而不是NotificationActivity.class。我想这是一个错字

/** 
    * Create and show a simple notification containing the received FCM message. 
    * 
    * @param messageBody FCM message body received. 
    */ 
    private void sendNotification(String messageBody) { 
     Intent intent = new Intent(this, NotificationActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, 
       PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 

     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.notification_bg) 
       .setContentTitle("FCM Message") 
       .setVibrate(new long[] { 1000, 1000, 1000, 1000, 1000 }) 
       .setLights(Color.RED, 3000, 3000) 
       .setContentText(messageBody) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    } 
+0

我试过 Intent intent = new Intent(this,NotificationActivity.class); 但无法正常工作 –

0

我没有在您提供的代码中找到sendNotification()的调用。我确定您看到的通知是从Firebase而不是从sendNotification()。请参阅this page。如果您的应用程序处于后台并且通知有效内容包含通知部分,则您的通知将传递到系统托盘,然后通过点击启动Launcher活动将任何数据从通知传递到Launcher活动。

要解决您的问题,请只发送数据消息,并在onMessageReceived()的适当位置拨打sendNotification(),意图为Notification.class