0

我是 android 的新手。当手机打开时,android 中的服务是否会自动启动?如果是,那很好。如果没有,谁能解释我如何启动特定的服务?

4

6 回答 6

2

不,服务不会在设备启动后自动启动。但是您可以在设备启动完成时注册一个 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));
        }
    }
}
于 2012-10-29T05:01:32.967 回答
1

在基于用户的应用程序中,服务不会自动启动

您需要添加以下代码

<receiver android:name="com.wallpaper.StartReceiver" xmlns:android="#unknown">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
</receiver>
于 2012-10-29T04:57:42.423 回答
1

您最好从这里阅读有关广播接收器的内容 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/

于 2012-10-29T05:05:52.833 回答
0

你可以开始你的服务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());
    }
}
}
于 2012-10-29T05:02:02.813 回答
0

这取决于您要启动哪种服务以及何时启动该服务的要求。如果您想在启动时启动特定服务,那么您必须像 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是扩展服务并具有服务实现的类。

于 2012-10-29T05:13:12.373 回答
0

除非您在清单中明确定义它们应在引导时启动,否则它们不会自动启动。为此,您需要添加操作

<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

于 2012-10-29T05:17:28.343 回答