2010-09-14 2 views
1

У меня есть виджет, который при нажатии открывается действие из того же приложения, что и виджет. Когда действие закрывается/отклоняется с помощью кнопки, пользователь увидит полное окно приложения, если приложение было ранее открыто/в памяти. Есть ли способ завершить работу и вернуться на главный экран, а не на существующий экземпляр приложения?Android - Как запустить активность из виджета и вернуться на главный экран

Intent i = new Intent(this,RateIt.class); 
i.putExtra("com.sporadicsoftware.NetQ.movie_id",aMovie.title_id); 
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET|Intent.FLAG_ACTIVITY_NO_HISTORY|Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      PendingIntent pendingIntent = PendingIntent.getActivity(context, 
        0, i, PendingIntent.FLAG_UPDATE_CURRENT); 
      updateViews.setOnClickPendingIntent(R.id.movie_one_title, pendingIntent); 

ответ

4

Посмотрите на UI Директиве "Notifications should let the user easily get back to the previous activity" для подобной ситуации, а также раздел Основы применения рамочной темы Activities and Tasks.

В зависимости от ваших потребностей вы можете использовать флаг намерения FLAG_ACTIVITY_NEW_TASK в сочетании с настройкой индивидуальной близости к активности, которую вы хотите открыть отдельно. Вы можете установить атрибут taskAffinity элемента <activity> в манифесте пустой строки. Это было бы хорошим решением, если вы всегда будете использовать эту деятельность отдельно от остальной части приложения.

От documentation:

android:taskAffinity

Задача о том, что деятельность имеет сродство. Мероприятия с одинаковой близостью концептуально относятся к одной и той же задаче (к одному и тому же «приложению» с точки зрения пользователя). Сродство задачи определяется сродством его корневой активности. Аффинность определяет две вещи - задачу, в которой действие переопределяется (см. Атрибут allowTaskReparenting) и задача, которая будет размещать действие при запуске с флагом FLAG_ACTIVITY_NEW_TASK.

По умолчанию все действия в приложении имеют одинаковую близость. Вы можете установить этот атрибут, чтобы группировать их по-разному и даже размещать действия, определенные в разных приложениях в рамках одной и той же задачи. Чтобы указать, что активность не имеет сродства к какой-либо задаче, установите ее в пустую строку.

Если этот атрибут не установлен, действие наследует набор аффинити для приложения (см. Атрибут элемента taskAffinity). Имя аффинности по умолчанию для приложения - это имя пакета, заданное элементом <manifest>.