是否自动启动服务

时间:2012-10-29 04:55:55

标签: android android-intent android-service

我是android的新手。当移动设备开机时,android中的服务是自动启动的吗?如果是的那就太棒了。如果没有人可以解释我怎么能启动特定的服务?

6 个答案:

答案 0 :(得分: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));
        }
    }
}

答案 1 :(得分:1)

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

您需要添加以下代码

<receiver android:name="com.wallpaper.StartReceiver" xmlns:android="#unknown">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
</receiver>

答案 2 :(得分: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/

答案 3 :(得分: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());
    }
}
}

答案 4 :(得分: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是扩展服务并具有服务实现的类。

答案 5 :(得分: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