早上好。
我有一个关于如何在没有GUI的情况下创建应用程序的问题。它应该在用户按下图标时启动。阅读其他帖子,似乎这样做的自然方式就是服务。
由于应用程序没有GUI,因此添加任何Activity都没有意义。因此,服务必须解除绑定。因此,如果没有组件调用startService
,并且没有外部组件发送意图,¿服务如何启动?
清单中是否有任何属性可以实现此目的?或者可以扩展应用程序并使用onCreate
来启动服务?
感谢。
更新: - 如果没有Intent,就无法在同一个应用中启动服务。其他选项可能是自动启动或广播接收器,但这些不符合我的要求。 - 没有活动的测试应用程序,图标甚至没有显示在启动器中。不知道这个的原因,可能与没有发射器活动的清单有关。
答案 0 :(得分:2)
Android启动器中显示的应用程序列表基本上是系统中具有LAUNCHER
意图过滤器的所有活动的列表:
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
如果您将此意图过滤器放在<service>
上,它将无效(刚刚尝试过)。因此,做你想做的事的唯一方法是通过Activity
。我认为最干净的方式是这样的:
public void onCreate(Bundle savedInstanceState) {
Intent service = new Intent(this, MyService.class);
startService(service);
Toast.makeText(this, "Service started.", Toast.LENGTH_SHORT).show();
finish();
}
除了屏幕底部显示“服务已启动”的小消息外,用户不会看到任何内容。这将在几秒钟内自动消失。这是干净的和用户友好。
答案 1 :(得分:0)
当有人拨打startService()
或有人拨打bindService()
时,服务就会启动。请注意,如果服务仅通过bindService()
启动,则当Activity明确解除绑定或被销毁(并且它是唯一的绑定器)时,它将自动停止。
您可以在AndroidManifest.xml
中声明BOOT_COMPLETED_ACTION
广播接收器,并在系统启动时启动您的服务。但您的服务只会在下次设备重启时启动。没有活动的应用程序和Android 3.1中的此广播事件存在一些问题。可以找到更多信息here。
通常,即使您的主要组件是服务,在您的应用程序中至少有一个活动也是很好的。此活动将在用户启动时启动该服务,并且还可能会暴露一些配置服务行为的能力。
启动服务的活动示例:
public class ServiceStarterActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
startService(new Intent(this, ServiceA.class));
finish();
}
}