Ist es in irgendeiner Weise möglich, eine Aktivität über die Hauptfunktion ohne Benutzeroberfläche zu starten? dh gibt es eine Möglichkeit, eine Art "Wrapper" um eine andere Aktivität zu erstellen, dh durch Starten der Hauptaktivität gelangen Sie automatisch zu einer anderen Aktivität.
Wenn dies nicht möglich ist, gibt es eine Möglichkeit, die Hauptaktivität vom Stapel zu entfernen, sodass Sie durch Klicken auf die Schaltfläche "Zurück" nicht zu einer leeren Benutzeroberfläche gelangen? Hier ist ein Beispiel dafür, was ich versuche:
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);
}
}
FLAG_ACTIVITY_CLEAR_TOP
Trick hier funktioniert, da derActivity
Start von einer anderen Anwendung stammt.finish()
sollte aber auf jeden Fall funktionieren.finish()
am Ende deronCreate()
Methode der Aktivität auf , kurz bevor sie zurückkehrt.Android bietet auch ein spezielles Thema dafür:
android:theme="@android:style/Theme.NoDisplay"
quelle
Theme.NoDisplay
(nur 6 Attribute) in eine beliebige Erweiterung von kopierenTheme.AppCompat.*
, um Ihren eigenen zu erstellenTheme.AppCompat.NoDisplay
, der mit funktioniertAppCompatActivity
.Verwenden Sie in Ihrem Manifest das Thema, wenn Sie die Aktivität deklarieren
"@android:style/Theme.Translucent.NoTitleBar"
Ex:
<activity android:name="yourActivityName" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar">
quelle
Nur für den Fall, dass Sie Android 6.0+ verwenden oder das Target SDK 23+ ist, führt ein Thema
android:theme = "@android:style/Theme.NoDisplay"
zu einem fehlerhaften Absturzdid not call finish() prior to onResume() completing
. Dies ist in der Tat ein Fehler, der von Google-Entwicklern hier erkannt wurde .Es wird daher empfohlen, eine Aktivität mit folgendem Thema als Problemumgehung zu verwenden.
android:theme = "@android:style/Theme.Translucent.NoTitleBar"
quelle
Verwenden von
<activity android:name="yourActivityName" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar">
erwähnt von Brian515 funktioniert super. Diese Methode ist nützlich, um eine Einstiegspunktaktivität zu erstellen, die entscheidet, welche Aktivität aufgerufen, gestartet, Dienste usw. bereitgestellt werden sollen, ohne dass dem Benutzer eine Benutzeroberfläche angezeigt werden muss. Denken
finish()
Sie daran, zu verwenden, nachdem Sie Ihre Absicht begonnen haben.quelle
Ich denke, das würde dir sehr helfen:
<activity android:name = "MyActivity" android:label = "@string/app_name" android:theme = "@android:style/Theme.NoDisplay" >
quelle
Fügen Sie in Ihrem Manifest
@android:style/Theme.Translucent.NoTitleBar"
wie in einigen der obigen Antworten erwähnt hinzu.Entfernen Sie auch die
setContentView(R.layout.your_activity);
Zeile aus Ihrer Datei activity.java.quelle
Ich verwende
AppCompatActivity
und die in dieser SO bereitgestellten Lösungen haben mein Problem nicht gelöst. Hier ist, was für mich funktioniert hat.Ich habe folgendes in mein hinzugefügt
styles.xml
.<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> </style> <style name="AppTheme.NoDisplay"> <item name="android:windowBackground">@null</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowIsTranslucent">true</item> <item name="android:windowAnimationStyle">@null</item> <item name="android:windowDisablePreview">true</item> <item name="android:windowNoDisplay">true</item> </style>
Für jede Aktivität, bei der ich die Anzeige deaktivieren möchte, habe ich Folgendes geändert:
<activity android:name=".NoDisplayActivity" android:theme="@style/AppTheme.NoDisplay">
Prost!
quelle
Sieht ähnlich aus wie die hier gestellte Frage: Entfernen einer Aktivität aus dem Verlaufsstapel
Wenn ja, können Sie Folgendes verwenden:
Dies sollte funktionieren, um Aktivitäten vom Stapel zu löschen.
Wenn Sie aktuelle Apps ausschließen müssen (lange Home-Taste drücken), können Sie dieses Flag verwenden:
quelle
Wenn Sie nicht mit der Benutzeroberfläche interagieren, klingt das, was Sie versuchen, eher wie ein Android-Dienst.
quelle
Ich hatte verwendet
moveTaskToBack(true)
inonResume()
setzen die gesamte Aktivität Stapel im Hintergrund.quelle