如何在没有UI的情况下启动一个活动?
是否有可能在没有UI的情况下从主函数启动一个活动? 即是否有办法在另一个活动周围创build一种“包装”,即通过启动主要活动,它自动将您带到另一个活动。
如果这是不可能的,有没有办法从堆栈中删除主要活动,以便单击后退button不会带你到一个空白的用户界面? 以下是我想要做的一个例子:
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); } }
您需要添加意图标志,
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
要么
调用“ finish();
”后发射意图。
Android也为此专门提供了一个主题:
android:theme="@android:style/Theme.NoDisplay"
在你的清单中,当你声明活动时,使用主题"@android:style/Theme.Translucent.NoTitleBar"
例如:
<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提到的作品很棒。 此方法对创build入口点活动非常有用,该入口点活动决定要调用哪个活动,启动,服务等,而不必向用户显示UI。 记住在开始你的意图之后使用finish()
。
我认为这会帮助你很多:
<activity android:name = "MyActivity" android:label = "@string/app_name" android:theme = "@android:style/Theme.NoDisplay" >
如果你使用的是Android 6.0+或者Target SDK是23+,那么有一个主题android:theme = "@android:style/Theme.NoDisplay"
会导致崩溃,错误did not call finish() prior to onResume() completing
。 这实际上是Google开发者在这里认可的一个错误。
所以build议使用以下主题的活动作为解决方法。
android:theme = "@android:style/Theme.Translucent.NoTitleBar"
看起来类似于这里问的问题: 从历史堆栈中删除一个活动
如果是,那么你可以使用:
FLAG_ACTIVITY_NO_HISTORY
这应该起作用来清除堆栈中的活动。
如果你需要排除最近的应用程序(长按主键),你可以使用这个标志:
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS
我已经在onResume()
使用moveTaskToBack(true)
将整个活动堆栈放在后台。
在你的清单中添加@android:style/Theme.Translucent.NoTitleBar"
在上面的一些答案中提到。
另外删除setContentView(R.layout.your_activity);
来自你的activity.java文件。
如果你没有和UI进行交互,你试图做的听起来更像是一个android服务。