使用通知将数据传递到应用程序

时间:2011-06-08 22:00:07

标签: android notifications android-intent flags android-pendingintent

我创建了两个应用程序。

一个应用程序是消息接收器( app1 ),另一个应用程序( app2 )用于根据消息执行其他任务。

第一个应用程序(app1)收到一条消息,创建通知并显示在顶部。 当用户单击通知时,它会调用另一个应用程序(app2)根据消息执行其他任务。

如果应用程序(app2)未运行,则应启动它。如果它已在运行,则应显示实例并完成任务。

我正在使用以下代码:

protected void displayNotification() {

        Notification notification = new Notification(icon, tickerText, when);
        Bundle xtra = new Bundle();

        Intent ntent = new Intent(Intent.ACTION_SEND);
        ntent.setClassName("com.example.mytestapp",
                "com.example.mytestapp.MainActivity");

        xtra.putString("id", "8610B0DD");
        xtra.putParcelable("message", msg);

        ntent.putExtras(xtra);
        ntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        ntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
                ntent, PendingIntent.FLAG_UPDATE_CURRENT);
        notification.setLatestEventInfo(context, contentTitle, contentText,
                pendingIntent);
        final int button_Click = 1;
        nm.notify(button_Click, notification);
}

这很好但是创建了另一个应用程序(app2)的多个实例

有没有办法阻止创建这么多副本?

2 个答案:

答案 0 :(得分:0)

您是否尝试为活动的launchMode设置“singleTask”或“singleInstance”? http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

答案 1 :(得分:0)

与此代码完美配合。

            Intent ntent = new Intent();
            ntent.setClassName("com.project.test",
                    "com.project.test.MainActivity");
            ntent.setType("vnd.android-dir/mms-sms");

            ntent.putExtras(bundle);

            int flags = Intent.FLAG_ACTIVITY_NEW_TASK
                    | Intent.FLAG_ACTIVITY_SINGLE_TOP
                    | Intent.FLAG_ACTIVITY_CLEAR_TOP;
            ntent.setFlags(flags);

            //startActivity(ntent);