Android多个通知在点击时发送相同的数据

时间:2013-06-10 12:25:25

标签: android android-intent android-notifications android-notification-bar

android中的通知在点击时采取相同的意图。 我在安装主题后发送通知。考虑我安装4个主题,4个通知出现在通知窗口中,但是当我点击每个通知时,它将启动特定活动,但意图是为每个意图提供相同的数据。

我的代码就像这样

    @SuppressWarnings("deprecation")
void sendInstalledNotification(String fileName, String packageName) {
    NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

    String name = "";
    try {
        name += fileName.substring(fileName.lastIndexOf(".") + 1);
    } catch (Exception e) {
        Log.e("NewThemeChooser", "Invalid Package name");
        e.printStackTrace();
    }
    name += " Installed";
    Notification notification = new Notification(R.drawable.ic_launcher_9, name , System.currentTimeMillis());

    Intent intent = new Intent(mContext , ThemeInfo.class);
    Bundle bundle = new Bundle();
    bundle.putString("apkid", packageName);
    bundle.putBoolean("isApplied", false);
    intent.putExtra("bundle", bundle);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
    notification.setLatestEventInfo(mContext, name, "Click to Apply Theme", pendingIntent);
    notification.flags = Notification.FLAG_AUTO_CANCEL;
    Log.d("NewThemeChooser__:ThemeChangeReceiver" , "hascode : " + packageName.hashCode() + " installed " + packageName);
    notificationManager.notify(packageName.hashCode(), notification);

}

我将onCreate of ThemeInfo活动中的意图数据打印为

    Bundle bundle = getIntent().getBundleExtra("bundle");
    apkid = bundle.getString("apkid");
    isApplied = bundle.getBoolean("isApplied", false);

    System.out.println("NewThemeChooser__:bundle apkid "  +  apkid );

我在日志中得到的结果是

D/NewThemeChooser__:ThemeChangeReceiver( 4423): hascode : -186637114 installed com.test.theme.MiCrease
D/NewThemeChooser__:ThemeChangeReceiver( 4423): hascode : 2106806482 installed com.test.theme.iPhone
D/NewThemeChooser__:ThemeChangeReceiver( 4423): hascode : -1413669305 installed com.test.theme.Simpsons
D/NewThemeChooser__:ThemeChangeReceiver( 4423): hascode : -2146296452 installed com.test.theme.AnnaTheme
I/System.out( 4423): NewThemeChooser__:bundle apkid com.test.theme.MiCrease
I/System.out( 4423): NewThemeChooser__:bundle apkid com.test.theme.MiCrease
I/System.out( 4423): NewThemeChooser__:bundle apkid com.test.theme.MiCrease
I/System.out( 4423): NewThemeChooser__:bundle apkid com.test.theme.MiCrease

2 个答案:

答案 0 :(得分:18)

我遇到了同样的问题,问题是Android有点过于聪明,而且给你的是PendingIntent而不是新的PendingIntent。来自 docs

  

人们常犯的一个错误就是创建了IntentPendingIntent个对象,这些对象的“额外”内容不同,每次都会有不同的Intent。这不会发生。用于匹配的Intent.filterEquals部分与Intent定义的部分相同。如果您使用两个Intent.filterEquals对象,这些对象与PendingIntent相同,那么对于这两个对象,您将得到相同的requestCode

按如下方式修改代码,以提供唯一的// ... PendingIntent pendingIntent = PendingIntent.getActivity(mContext, packageName.hashCode(), intent, 0); // ...

PendingIntent

这将确保使用唯一的hashCode(),而不是相同的。{/ p>

请注意,requestCode可能不是唯一的,因此如果可能,请使用另一个唯一整数作为{{1}}。

答案 1 :(得分:0)

使用了对我有用的这段代码。

      int requestCode = new Random().nextInt();
      PendingIntent contentIntent = PendingIntent.getActivity(this, requestCode, 
      notificationIntent, PendingIntent.FLAG_CANCEL_CURRENT);