我是 android 的新手。当手机打开时,android 中的服务是否会自动启动?如果是,那很好。如果没有,谁能解释我如何启动特定的服务?
6 回答
不,服务不会在设备启动后自动启动。但是您可以在设备启动完成时注册一个 android.intent.action.BOOT_COMPLETED 以启动服务:
AndroidManifest.xml:
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED">
</uses-permission>
<receiver android:name=".BootReceiver" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</receiver>
BootReceiver.java:
public class BootReceiver extends IntentReceiver
{
static final String ACTION = "android.intent.action.BOOT_COMPLETED";
public void onReceiveIntent(Context context, Intent intent)
{
if (intent.getAction().equals(ACTION))
{
context.startService(new Intent(context,YourService.class));
}
}
}
在基于用户的应用程序中,服务不会自动启动
您需要添加以下代码
<receiver android:name="com.wallpaper.StartReceiver" xmlns:android="#unknown">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
您最好从这里阅读有关广播接收器的内容 http://www.vogella.com/articles/AndroidBroadcastReceiver/article.html
广播接收器是允许注册系统或应用程序事件的 Android 组件(在您的情况下为 ACTION_BOOT_COMPLETED)
一旦 Android 加载,它就会广播一条消息,表明启动已完成,所有注册接收该事件的应用程序都将收到它,你可以做你的事情......
可以使用下面的代码通过将其添加到清单文件中来完成
<receiver android:name="some_pagacakge_name" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
这里有一些链接 http://www.grokkingandroid.com/android-tutorial-broadcastreceiver/
你可以开始你的服务startService(intent)
在电话重启时运行它
在清单文件中添加以下权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
并宣布了一个Broadcast Receiver
喜欢
<receiver android:name=".BootReceiver"
android:label="BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"></action>
</intent-filter>
</receiver>
进而
public class BootReceiver extends BroadcastReceiver {
private static final String TAG="BootReceiver";
@Override public void onReceive(Context context,Intent intent){
try{
context.startService(new Intent(context,yourServiceName.class));
Log.i(TAG,"Starting Service yourServiceName");
}catch(Exception e){
Log.e(TAG,e.toString());
}
}
}
这取决于您要启动哪种服务以及何时启动该服务的要求。如果您想在启动时启动特定服务,那么您必须像 Devangi Desai 提到的那样注册接收器,然后您需要发出该startService()
方法。
public class Receiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if (intentAction.equals(Intent.ACTION_BOOT_COMPLETED))
context.startService(new Intent(context,
ConnectionService.class));
}
}
这ConnectionService.class
是扩展服务并具有服务实现的类。
除非您在清单中明确定义它们应在引导时启动,否则它们不会自动启动。为此,您需要添加操作
<action android:name="android.intent.action.BOOT_COMPLETED" />
在您的服务清单文件中。
例子:
<receiver android:name="MyStartupIntentReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
</receiver>
有关服务的更多详细信息,请阅读此官方指南: https ://developer.android.com/guide/components/services.html