【问题标题】:I'm not able to open specified activity via notification我无法通过通知打开指定活动
【发布时间】:2016-12-06 10:37:36
【问题描述】:

我正在使用 Firebase 通知在我的 Android 应用中发送通知。我想实现以下目标: 当用户单击通知时,我选择的活动应该打开并且活动应该自动执行一些我将定义的操作,例如在 webview 中加载特定的 url 等。

我做了什么?

在 Firebase 控制台的自定义数据下,我将键设置为 click_action。并将值作为 ttdemo 并发送通知。

在我的清单中:

<?xml version="1.0" encoding="utf-8"?>

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name=".aboutmain" />
    <activity android:name=".Timetable">
    <intent-filter>
        <action android:name="ttdemo"/>
    </intent-filter>

    </activity>
    <activity android:name=".Results" />
    <activity android:name=".timetable_downloads" />
    <activity android:name=".result_downloads" />
    <activity android:name=".eforms" />
    <activity android:name=".write" />
    <activity android:name=".qpapers" />
    <activity android:name=".november2014" />
    <activity android:name=".november_2014_downloads" />
    <activity android:name=".april_2015" />
    <activity android:name=".november_2015" />
    <activity android:name=".april_2016"></activity>
</application>

当前情况: 我收到通知,但时间表活动未打开。 相反,主活动打开。

【问题讨论】:

  • 你能显示通知电话的代码吗???
  • 可以分享一下你的清单文件吗?
  • @Amee Joshi 我还没有编写通知调用代码。我应该写什么。
  • @Vinodh 请检查更新后的帖子。
  • @AmeyBansod :您可以尝试使用意图标志为 NEW_TASK 启动 TimeTable。触发通知事件时,似乎应用程序没有任务。

标签: android firebase android-manifest firebase-notifications


【解决方案1】:

当您的onMessageReceived 方法被调用时,尝试像吹代码一样。

public void onMessageReceived(RemoteMessage remoteMessage) {
    Map<String, String> data = remoteMessage.getData();
    if (data.containsKey("click_action")) {
        String className = data.get("click_action");
        Class cls;
        try {
            cls = Class.forName(className);
            Intent i = new Intent(context, cls);
            //i.putExtras(extras); // put extras if you required
            context.startActivity(i);
        }catch(ClassNotFoundException e){
            //means you made a wrong input in firebase console
        }           
    }
}

要使用 firebase 控制台发送通知,请将键值对作为自定义数据,如下所示:

Key: click_action
Value: <fully qualified class name of your activity>

【讨论】:

  • 当然@Priyank Patel 尝试。
  • 我应该在哪里调用 onMessageReceived ?
  • FirebaseMessagingService的覆盖方法,在收到消息时调用。查看FCM Document的详细信息,这里是Example class
  • 感谢您提供文档。我创建了名为通知的新服务并编辑了清单。然后,我写了@Override 和你的代码。
  • 2 错误:1. 无法解析符号上下文。我应该写这个吗? 2.变量cls可能没有初始化。
【解决方案2】:

您需要在 FirebaseMessagingService 类的 onMessageReceived(RemoteMessage remoteMessage) 方法中将平移意图传递给通知

 Intent resultIntent = new Intent(FirebaseMessagingService.this, MobilActivity.class);
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent intent = PendingIntent.getActivity(getApplicationContext(), 0,
                    resultIntent, PendingIntent.FLAG_CANCEL_CURRENT);

并将通知对象设置为

Notification notification;
        notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
.setContentIntent(resultPendingIntent)

和类似的方法

private void showSmallNotification(NotificationCompat.Builder mBuilder, int icon, String title, String message, String timeStamp, PendingIntent resultPendingIntent, Uri alarmSound) {
    NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
    inboxStyle.addLine(message);
    Notification notification;
    notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
            .setAutoCancel(true)
            .setContentTitle(title)
            .setContentIntent(resultPendingIntent)
            .setSound(alarmSound)
            .setStyle(inboxStyle)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.drawable.growth_indus)
            .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
            .setContentText(message)
            .build();
    NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notificationManager.notify(AppConstants.getParamInt(AppConstants.GlobalParamEnum.NOTIFICATION_ID), notification);
}

【讨论】:

  • 我应该写什么来代替 MobileActivity.class?
  • 我收到以下错误: .setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon)) .setContentText(message) .build(); NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); notification.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(AppConstants.getParamInt(AppConstants.GlobalParamEnum.NOTIFICATION_ID), 通知);
  • 错误是无法解析符号 mContext 和 AppConstants
  • mContext 是您编写代码的上下文 1- 如果它是 Activity =,则将 mContext 替换为 ActivityName.this 2. 如果它是片段,则将 mContext 替换为 getActivity() repalce notificationManager.notify(AppConstants.getParamInt( AppConstants.GlobalParamEnum.NOTIFICATION_ID), 通知); } with notificationManager.notify(101, notification); }
【解决方案3】:

终于,我达到了目的!

这个解决方案非常适合我! http://androidbash.com/firebase-push-notification-android/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-27
    相关资源
    最近更新 更多