我有一个应用程序正在接收 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 的PendingIntent
的Intent
,在该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);
}
}