【问题标题】:How to Open Activity with Notification如何使用通知打开活动
【发布时间】:2013-08-26 05:49:03
【问题描述】:

我正在实现一个 sdk,当用户单击通知时,某些活动将打开。我只是想知道如何根据意图传递不同的 - 不同的活动。这是我的示例代码:-

void fireNotification(Context _context, String appname,
            String appdescription) {

        Intent resultIntent = new Intent(_context, ResultActivity.class);
        try {

            PendingIntent contentIntent = PendingIntent.getActivity(_context,0, resultIntent,PendingIntent.FLAG_UPDATE_CURRENT);

            mBuilder = new NotificationCompat.Builder(_context);
            }

请建议我如何在意图中传递不同的活动。

【问题讨论】:

标签: android notifications


【解决方案1】:

我假设您想加载另一个 Activity 而不是 ResultActivity,您可以将 ResultActivity.class 更改为另一个 Activity 的类名。

如果您希望能够在用户点击通知后确定要加载哪个 Activity,您可以创建一个新的 Activity 来确定在它启动后要加载哪个 Activity,有点像“重定向”的 Activity屏幕。

【讨论】:

  • 嘿,实际上我正在开发一个 sdk,然后我创建了 jar 文件。所以我不想确保开发人员只将 jar 文件和活动放在方法上,这样我们就可以使用我们的 sdk
  • 我假设您的 fireNotification 将在您的 SDK 中用于启动用户的 Activity?您需要构建配置功能,让您的 SDK 的用户指定应在这些事件上启动哪些活动。然后,您的 SDK 可以获取类似“com.example.myactivity1”的活动 请参阅 developer.android.com/reference/android/content/…> 处的 Intent 构造函数文档
【解决方案2】:

试试这个..

void fireNotification(Context _context, String appname,
            String appdescription) {

        Intent resultIntent = null;

        if(something)
             resultIntent = new Intent(_context, SomeActivity1.class);
        else
             resultIntent = new Intent(_context, SomeActivity2.class);

        try {

            PendingIntent contentIntent = PendingIntent.getActivity(

            _context,

            0,

            resultIntent,

            PendingIntent.FLAG_UPDATE_CURRENT);

            mBuilder = new NotificationCompat.Builder(

            _context);

}

【讨论】:

  • 嘿实际上我想将我的类引用传递给我的通知。请建议我如何通过我自己的方法传递它。
【解决方案3】:

这是我用来创建通知的一些代码。它使用 v4 兼容性库。 如您所见,如果要更改要启动的 Activity,则必须重新创建 PentingIntent。像我所做的那样取消和重新发布意图并没有错。如果您没有允许票文本用户可能甚至不会注意到它。另外,请注意,我知道兼容性构建器允许您分配自定义视图,但每次都会崩溃,直接分配似乎更稳定。

public static void setupNotification(Context context) {
    if (mNotificationManager == null) {
        mNotificationManager = (NotificationManager) context.getSystemService(Service.NOTIFICATION_SERVICE);
    }
    mNotificationManager.cancel(R.layout.main);
    int icon = R.drawable.ic_stat_notify_connected;
    String tickerText = context.getString(R.string.TickerText);
    createNotification(context, tickerText, icon);
    mNotificationManager.notify(R.layout.main, mNotification);
}

private static void createNotification(Context context, String tickerText, int icon) {
    Intent notificationIntent = new Intent();
    notificationIntent = new Intent(context, NotificationOptionsActivity.class);

    String contentTitle = context.getString(R.string.MessageTitle);
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, Intent.FLAG_ACTIVITY_NEW_TASK);
    if (mNotification == null) {
        mNotification = new NotificationCompat.Builder(context.getApplicationContext()).setContentTitle(contentTitle).setSmallIcon(icon).setContentIntent(contentIntent).build();

        mNotification.flags |= Notification.FLAG_ONGOING_EVENT;

        RemoteViews contentView = new RemoteViews(context.getApplicationContext().getPackageName(), R.layout.notification_custom_layout);
        mNotification.contentView = contentView; 
    } else {
        mNotification.contentIntent = contentIntent;
    }
}

注意:您必须使用Intent.FLAG_ACTIVITY_NEW_TASK,否则将无法使用。 如果您没有自定义视图,您可以删除自定义视图的代码。

如果您有自定义视图,您可以在其中设置值,如下所示:

    mNotification.contentView.setTextViewText(R.id.noti_user, user);
    //default image
    mNotification.contentView.setImageViewResource(R.id.noti_image, R.drawable.ic_user_icon);

【讨论】:

  • 嘿,实际上我正在开发一个 sdk,然后我创建了 jar 文件。所以我不想确保开发人员只将 jar 文件和活动放在方法上,这样我们就可以使用我们的 sdk
  • 哦,你可以把Class对象作为参数,所以public void myMethod(Context context, Class<?> myActivity)然后notificationIntent = new Intent(context, myActivity);myMethod(context, ActivityName.class);调用方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多