在没有UI的情况下,以任何方式从主函数启动活动是否可行?即,有没有办法围绕另一个活动创建一种“包装”,即通过启动主要活动,它会自动转到另一个活动。
如果那是不可能的,有没有办法从堆栈中删除主要活动,以便单击后退按钮不会将您带到空白UI? 以下是我正在尝试做的一个例子:
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);
}
}
答案 0 :(得分:116)
Android还专门为此提供了一个主题:
android:theme="@android:style/Theme.NoDisplay"
答案 1 :(得分:50)
在您的清单中,当您声明活动时,请使用主题"@android:style/Theme.Translucent.NoTitleBar"
例如:
<activity android:name="yourActivityName" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar">
答案 2 :(得分:26)
您需要添加Intent标志
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
或者
在触发意图后调用“finish();
”。
答案 3 :(得分:8)
Just in case you are using Android 6.0+ or Target SDK is 23+, having a theme android:theme = "@android:style/Theme.NoDisplay"
will lead to a crash with error did not call finish() prior to onResume() completing
. This in fact is a bug recognised by Google developers here.
So it is recommended to use an activity with following theme as a workaround.
android:theme = "@android:style/Theme.Translucent.NoTitleBar"
答案 4 :(得分:7)
使用
<activity android:name="yourActivityName" android:label="@string/app_name" android:theme="@android:style/Theme.Translucent.NoTitleBar">
Brian515提到的效果很好。此方法对于创建入口点Activity非常有用,该入口点决定要调用哪些活动,启动,服务等,而无需向用户显示UI。在开始意图后,请务必使用finish()
。
答案 5 :(得分:7)
我认为这会对你有所帮助:
<activity android:name = "MyActivity"
android:label = "@string/app_name"
android:theme = "@android:style/Theme.NoDisplay" >
答案 6 :(得分:2)
与此处提出的问题类似:Removing an activity from the history stack
如果是,则可以使用:
FLAG_ACTIVITY_NO_HISTORY
这应该可以用来擦除堆栈中的活动。
如果您需要从最近的应用中排除(长按主页键),您可以使用此标记:
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
答案 7 :(得分:2)
我在moveTaskToBack(true)
中使用onResume()
将整个活动堆栈放在后台。
答案 8 :(得分:2)
在您的清单中添加@android:style/Theme.Translucent.NoTitleBar"
,如上面的一些答案所述。
同时从activity.java文件中删除setContentView(R.layout.your_activity);
行。
答案 9 :(得分:1)
如果您没有与UI交互,那么您尝试做的事情听起来更像是一个Android服务。
答案 10 :(得分:0)
我正在使用AppCompatActivity
,因此本SO中提供的解决方案无法解决我的问题。这是对我有用的。
我在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>
然后,对于要禁用显示的任何活动,我都进行了如下修改:
<activity
android:name=".NoDisplayActivity"
android:theme="@style/AppTheme.NoDisplay">
干杯!