BOOT_COMPLTED上的AutoStart应用程序无法启动服务未找到Intent

时间:2015-04-24 15:48:42

标签: android service broadcastreceiver

我正在尝试创建没有UI / Activity的Service应用程序。 该服务将在BOOT_COMPLETED开始。目前,当接收方服务无法启动主服务时,我遇到了一个问题。

错误听起来像(Android设备监视器):

标记:活动管理器 文字:无法启动服务Intent {cmp = com.remote.cat / .ActionService} U = 0:未找到

我在设备上的Android操作系统版本是4.2.2

我在PowerShell中通过此命令测试它:

adb.exe shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.remote.cat/.AutoStartServiceReceiver

这两项服务都在 com.remote.cat

包的根目录中

感觉我错过了一件小事或打错了,非常感谢任何帮助! 谢谢!

以下是清单的代码:

    <manifest   xmlns:android="http://schemas.android.com/apk/res/android"
            package="com.remote.cat"
            android:installLocation="internalOnly">

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

    <application android:allowBackup="true" android:label="@string/app_name"
                 android:icon="@mipmap/ic_launcher" android:theme="@style/AppTheme">

        <receiver android:name="com.remote.cat.AutoStartServiceReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
        </receiver>

    </application>

    <service android:name="com.remote.cat.AutoStartServiceReceiver"></service>
    <service android:name="com.remote.cat.ActionService"></service>

</manifest>

这是brodcastreceiver类:

package com.remote.cat;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class AutoStartServiceReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))
        {
            Intent serviceIntent = new Intent(context, ActionService.class);
            //Intent serviceIntent = new Intent("com.remote.cat.ActionService");
            context.startService(serviceIntent);
        }
    }
}

以下是我要尝试的主要服务:

package com.remote.cat;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
import java.util.TimerTask;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class ActionService extends Service
{
    private ScheduledThreadPoolExecutor executor = null;

    @Override
    public IBinder onBind(Intent intent)
    {
        return null;
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId)
    {
        executor = new ScheduledThreadPoolExecutor(4);

        final ScheduledFuture<?> handle = executor.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                Toast.makeText(getApplicationContext(), "one minute message", Toast.LENGTH_LONG).show();
            }
        }, 0, 8, TimeUnit.SECONDS);

        return START_STICKY;
    }
}

2 个答案:

答案 0 :(得分:1)

将清单中的AutoStartServiceReceiver声明更改为<receiver>而不是<service>

答案 1 :(得分:0)

错误发生在您的broadcastreceiver类

if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED))

应该是

if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))

修改

我认为您必须在应用程序标记内声明您的服务,因为它是应用程序的一部分