gpt4 book ai didi

android - Notification 的 PendingIntent 不要第二次调用我的 Activity

转载 作者:搜寻专家 更新时间:2023-11-01 09:12:26 26 4
gpt4 key购买 nike

我希望收到推送通知(c2dm)接收显示通知。这个通知开始,连同 PendingIntent,一个显示弹出窗口的 Activity 。单击“确定”按钮时,此弹出窗口会启动我的应用程序。

这是在接收推送通知时执行的代码:

private void dealMessage(Context context, Intent intent)
{
try
{
String message = intent.getExtras().getString("message");

Log.v("testc2dm","message : [" + message + "]");

//create bean of my Notification
NotificationPush notif = new NotificationPush();
notif.init((JSONObject)JSONValue.parse(message));

//create PendingIntent
Intent intentDialog = new Intent(context, DialogActivity.class);
intentDialog.putExtra("notif", notif);
int requestCode= (int) System.currentTimeMillis();
PendingIntent pi = PendingIntent.getActivity(context, requestCode, intentDialog, PendingIntent.FLAG_ONE_SHOT);

//Create the Notification
Notification n = new Notification();
n.flags |= Notification.FLAG_SHOW_LIGHTS; // allume l'écran
n.flags |= Notification.FLAG_AUTO_CANCEL; // fait disparaitre automatiquemet la notif apres un clic dessus
n.defaults = Notification.DEFAULT_ALL;
n.icon = R.drawable.icon;
n.when = System.currentTimeMillis();
n.setLatestEventInfo(context, "Mon titre", notif.getTitre(), pi);

//add my Notification
NotificationManager notificationManager = (NotificationManager)context.getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(ID_NOTIFICATION, n);
}
catch(Exception e)
{
Log.e("testc2dm","error : [" + e.getMessage() + "]");
e.printStackTrace();
}
}

这是我的 Activity ,显示弹出窗口并启动我的应用程序:

protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);

Log.v("testc2dm","DialogActivity oncreate()");

//recovery of my bean Notification
Intent intentParam = getIntent();
NotificationPush notif = (NotificationPush)intentParam.getSerializableExtra("notif");

if(notif != null)
{
Log.v("testc2dm","notif => titre [" + notif.getTitre() + "] -- msg [" + notif.getMessage() + "] -- type [" + notif.getType() + "]");

//display popup
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(notif.getMessage());
builder.setTitle(notif.getTitre());
builder.setCancelable(false);
builder.setNegativeButton("Ok", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int id)
{
if(!TestC2DMActivity.appIsRunning)
{
//launch first Activity of my application
Intent intent = new Intent(DialogActivity.this, TestC2DMActivity.class);
startActivity(intent);
}
}
});
builder.show();
}
}

我的问题是:如果我的应用程序将通过接收推送启动(c2dm > Notification > PendingIntent > DialogActivity > TestC2DMActivity)然后接收下一个推送,通知将正常显示,但单击通知将不会启动 DialogActivity。而当应用程序正常启动(应用程序图标)时,一切正常。

我觉得如果我的应用程序是由我的 PendingIntent 启动的,那么这个 PendingIntent 不再需要启动 DialogActivity .. 为什么??

非常感谢您的帮助,抱歉我的英语不好..

最佳答案

我有解决方案:

intentDialog.setAction("" + Math.random());

getExtra from Intent launched from a pendingIntent

还是谢谢你

关于android - Notification 的 PendingIntent 不要第二次调用我的 Activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7320428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com