尝试在 Android 上启动时启动服务 [英] Trying to start a service on boot on Android

查看:31
本文介绍了尝试在 Android 上启动时启动服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试在设备在 android 上启动时启动服务,但我无法让它工作.我在网上查看了许多链接,但没有一个代码有效.我是不是忘记了什么?

I've been trying to start a service when a device boots up on android, but I cannot get it to work. I've looked at a number of links online but none of the code works. Am I forgetting something?

<receiver
    android:name=".StartServiceAtBootReceiver"
    android:enabled="true"
    android:exported="false"
    android:label="StartServiceAtBootReceiver" >
    <intent-filter>
        <action android:name="android.intent.action._BOOT_COMPLETED" />
    </intent-filter>
</receiver>

<service
    android:name="com.test.RunService"
    android:enabled="true" />

广播接收器

public void onReceive(Context context, Intent intent) {
    if ("android.intent.action.BOOT_COMPLETED".equals(intent.getAction())) {
        Intent serviceLauncher = new Intent(context, RunService.class);
        context.startService(serviceLauncher);
        Log.v("TEST", "Service loaded at start");
    }
}

推荐答案

其他答案看起来不错,但我想我会将所有内容汇总为一个完整答案.

The other answers look good, but I thought I'd wrap everything up into one complete answer.

您的 AndroidManifest.xml 文件中需要以下内容:

You need the following in your AndroidManifest.xml file:

  1. 在您的 元素中:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

  • 在您的 元素中(确保为您的 BroadcastReceiver 使用完全限定的 [或相关] 类名):

  • In your <application> element (be sure to use a fully-qualified [or relative] class name for your BroadcastReceiver):

    <receiver android:name="com.example.MyBroadcastReceiver">  
        <intent-filter>  
            <action android:name="android.intent.action.BOOT_COMPLETED" />  
        </intent-filter>  
    </receiver>
    

    (不需要android:enabledexported等属性:Android默认是正确的)

    (you don't need the android:enabled, exported, etc., attributes: the Android defaults are correct)

    MyBroadcastReceiver.java中:

    package com.example;
    
    public class MyBroadcastReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent startServiceIntent = new Intent(context, MyService.class);
            context.startService(startServiceIntent);
        }
    }
    

  • 来自原始问题:

    • 不清楚 元素是否在 元素中
    • 不清楚是否为 BroadcastReceiver 指定了正确的完全限定(或相关)类名
    • 中存在拼写错误
    • it's not clear if the <receiver> element was in the <application> element
    • it's not clear if the correct fully-qualified (or relative) class name for the BroadcastReceiver was specified
    • there was a typo in the <intent-filter>

    这篇关于尝试在 Android 上启动时启动服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆