Как запустить Activity без интерфейса? - PullRequest
60 голосов
/ 24 апреля 2010

Можно ли каким-либо образом запустить действие из основной функции, не имея пользовательского интерфейса?то есть есть ли способ создать своего рода «обертку» вокруг другого действия, то есть, запустив основное действие, оно автоматически приведет вас к другому действию.

Если это невозможно, есть ли способ удалить основное действие из стека, чтобы при нажатии кнопки «Назад» не отображался пустой интерфейс?Вот пример того, что я пытаюсь сделать:

public class WrapperActivity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        final Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:555-1212"));
        startActivity(intent);
    }
}

Ответы [ 10 ]

117 голосов
/ 04 февраля 2011

Android также предоставляет тему специально для этого:

android:theme="@android:style/Theme.NoDisplay"
50 голосов
/ 24 апреля 2010

В вашем манифесте, когда вы объявляете действие, используйте тему "@android:style/Theme.Translucent.NoTitleBar"

Ex:

<activity android:name="yourActivityName" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar">
26 голосов
/ 24 апреля 2010

Вам нужно добавить флаг Intent,

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

Или

вызовите "finish();" после выстрела.

8 голосов
/ 15 июня 2017

На тот случай, если вы используете Android 6.0+ или Target SDK 23+, тема android:theme = "@android:style/Theme.NoDisplay" приведет к падению с ошибкой did not call finish() prior to onResume() completing. На самом деле это ошибка, признанная разработчиками Google здесь .

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

android:theme = "@android:style/Theme.Translucent.NoTitleBar"

7 голосов
/ 16 февраля 2015

Я думаю, это вам очень поможет:

<activity  android:name = "MyActivity" 
          android:label = "@string/app_name" 
          android:theme = "@android:style/Theme.NoDisplay" >
7 голосов
/ 30 сентября 2010

Использование

<activity android:name="yourActivityName" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar">

упомянутый Brian515 прекрасно работает. Этот метод полезен для создания точки входа Activity, которая решает, какую деятельность вызывать, запускать, обслуживать и т. Д., Не показывая пользователю пользовательский интерфейс. Не забудьте использовать finish() после того, как вы начали свое намерение.

2 голосов
/ 05 августа 2015

В вашем манифесте добавьте @android:style/Theme.Translucent.NoTitleBar", как указано в некоторых ответах выше.

Также удалите строку setContentView(R.layout.your_activity); из вашего файла activity.java.

2 голосов
/ 18 августа 2013

Я использовал moveTaskToBack(true) в onResume(), чтобы поместить весь стек активности в фоновый режим.

2 голосов
/ 26 октября 2011

Похоже на вопрос, заданный здесь: Удаление активности из стека истории

Если это так, то вы можете использовать:

FLAG_ACTIVITY_NO_HISTORY

Это должно работать, чтобы стереть действия из стека.

Если вам нужно исключить из недавних приложений (долгое нажатие клавишу домой), вы можете использовать этот флаг:

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

1 голос
/ 27 декабря 2011

Если вы не взаимодействуете с пользовательским интерфейсом, то, что вы пытаетесь сделать, больше похоже на службу Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...