2015-05-27 4 views
1

Можно установить более одного намерения для запуска, когда, например, пользователь нажимает уведомление.Как установить два намерения в ожидающем намерения

Позвольте мне объяснить мою конкретную проблему:

У меня есть приложение с уведомлениями. Каждое уведомление открывает другое действие (с разными дополнительными функциями).

Теперь я хочу извлечь информацию об использовании уведомлений. Итак, каждый раз, когда уведомление открывается, я хотел бы запустить Сервис с некоторыми дополнительными функциями.

Я хотел бы реализовать это, не изменяя существующие действия, поскольку они не «виновны» в изменении.

В идеале псевдокод может быть что-то вроде этого:

Intent originalActivityIntent=...; 
Intent notificationsAnalyticsIntent=getRegisterNotificationClick(notificationId,username); 
PendingIntent pi= PendingIntent.multiple(
            context, 
            originalActivityIntent, 
            notificationsAnalyticsIntent) 

Имея оба намерения запущен, когда уведомление будет нажата.

Написание какого-либо сервиса/широковещательного приемника может быть довольно сложным, так как мне нужно будет обрабатывать различные параметры для каждого действия.

Любые идеи о том, как сохранить это в чистоте?

ответ

0

Достигнуто довольно чистое решение. Не идеально, но он работает и сохраняет код в чистоте. Для этого требуется только создание одного действия с адаптером и его прозрачность для остальной части вашего приложения.

В манифесте:

<activity 
    android:name="com.tests.AnalyticsActivity" 
    android:noHistory="true"> 
</activity> 

И код Java:

public class AnalyticsActivity extends Activity { 

    private static final String KEY_INTERNAL_COMPONENT = "com.tests.AnalyticsReceiver.COMPONENT"; 
    private static final String KEY_NOTIFICATION_TYPE = "com.tests.AnalyticsReceiver.NOTIFICATION_TYPE"; 
    private static final String KEY_USERNAME = "com.tests.AnalyticsReceiver.USERNAME"; 

    public static Intent getLaunchIntent(
      Context context, Intent intent, long notificationType, String username) { 
     intent.putExtra(KEY_INTERNAL_COMPONENT, intent.getComponent()); 
     intent.setComponent(new ComponentName(context, AnalyticsActivity.class)); 
     intent.putExtra(KEY_NOTIFICATION_TYPE, notificationType); 
     intent.putExtra(KEY_USERNAME,username); 
     return intent; 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if(savedInstanceState==null){ 
      Intent intent=getIntent(); 
      long notifType=intent.getLongExtra(KEY_NOTIFICATION_TYPE, 0); 
      String username=intent.getStringExtra(KEY_USERNAME); 
      Log.e("RegisterEvent", "notif=" + notifType + ",username=" + username); 
      ComponentName componentName=intent.getParcelableExtra(KEY_INTERNAL_COMPONENT); 
      intent.setComponent(componentName); 
      startActivity(intent); 
     } 
    } 

} 
2

No.

Путь мы решили, что это то, что каждый Activity в приложение из простирается от некоторой базовой активности и в каждом уведомлении мы передаем дополнительный в намерении, что базовая деятельность справиться с этим.

+1

Спасибо за ваш ответ, я не совершенным, но действительно для меня решение, проверьте ответ в теме. – Addev

+1

Это довольно приятное решение, но может иметь некоторые проблемы с производительностью (откройте еще одно избыточное намерение) и, возможно, некоторые проблемы с пользовательским интерфейсом (можно увидеть «экран активности аналитики») – shem

Смежные вопросы