Как запустить действие без пользовательского интерфейса?


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

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

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 56

10 ответов:

вам нужно добавить флаг намерения,

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

или

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

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

android:theme="@android:style/Theme.NoDisplay"

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

Ex:

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

используя

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

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

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

<activity  android:name = "MyActivity" 
          android:label = "@string/app_name" 
          android:theme = "@android:style/Theme.NoDisplay" >

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

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

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

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

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

FLAG_ACTIVITY_NO_HISTORY

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

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

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

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

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

удалить setContentView(R.layout.your_activity); строка из вашей деятельности.Java-файл.

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