回调 待处理通知的意图



我有一个应用程序正在接收 GCM 通知,并链接到此通知的待处理意图以打开 URL:

    private void sendNotification(String message) {
    PendingIntent pendingIntent;
    Intent intent;
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    if (url != null) {
        intent = new Intent(Intent.ACTION_VIEW);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setData(Uri.parse(url));
        pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
                PendingIntent.FLAG_UPDATE_CURRENT);
        notificationBuilder.setContentIntent(pendingIntent);

它工作正常,但我希望在打开此意图时收到通知(最终用户单击通知以打开 URL)。

我尝试使用 OnFinished 回调,但这样做:

            PendingIntent.OnFinished finish = new PendingIntent.OnFinished() {
            public void onSendFinished(PendingIntent pi, Intent intent,
                    int resultCode, String resultData, Bundle resultExtras) {
                //sending information to Ordolink server as user opened the URL
                ...do my stuff....
            }
        };
        try {
            pendingIntent.send(Activity.RESULT_OK, finish, null);
        } catch (CanceledException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

待处理在收到通知后立即打开意向

我尝试使用BroadcastReceiver,如下所示:

我的活动:

Intent intent_broadcast = new Intent(this, MyBroadcastReceiver.class);
        intent_broadcast.putExtra("url", url);
        pendingIntent = PendingIntent.getBroadcast(this.getApplicationContext(), 234324243, intent_broadcast, PendingIntent.FLAG_ONE_SHOT);
        pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent_broadcast,
                PendingIntent.FLAG_UPDATE_CURRENT);
        notificationBuilder.setContentIntent(pendingIntent);

广播接收器 :

public class MyBroadcastReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
    Log.d("JRE", "Callback onReceive Intent open URL");
    Intent myIntent = new Intent(Intent.ACTION_VIEW);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    myIntent.setData(Uri.parse(intent.getStringExtra("url")));
    context.startActivity(myIntent);
  }

}

我还在清单中声明了广播接收器:

        <receiver android:name="MyBroadcastReceiver" >
    </receiver>

但MyBroadcastReceiver从未被调用。 任何想法 ?

我建议在您的应用程序中使用BroadcastReceiver作为打开 URL 的PendingIntentIntent,在该BroadcastReceiver中您可以知道用户何时打开通知。

示例代码 -

PendingIntent pendingIntent;
Intent intent;
NotificationManager notificationManager = (NotificationManager) getSystemService (Context.NOTIFICATION_SERVICE);
if (url != null) {
    intent = new Intent(context, MyBroadcastReceiver.class);
    intent.putExtra("url", url);
    pendingIntent = PendingIntent.getBroadcast(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_UPDATE_CURRENT);
    notificationBuilder.setContentIntent(pendingIntent);
}

在你的BroadcastReceiver——

public class MyBroadcastReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
        /* Whatever you want to do */
        ...
        /* Finally open the URL */
        Intent myIntent = new Intent(Intent.ACTION_VIEW);
        myIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        myIntent.setData(Uri.parse(intent.getStrinExtra("url")));
        context.startActivity(myIntent);
    }
}

最新更新