2015-04-24 1 views
0

Я пытаюсь создать приложение-службу без интерфейса/активности. Услуга начнется с BOOT_COMPLETED. В настоящее время у меня возникает проблема, когда служба-получатель не может запустить главную службу.Приложение AutoStart на BOOT_COMPLTED не может начать службу Intent not found

Звук ошибки как то (монитор Android Device):

Тэг: Руководитель направления Текст: Невозможно запустить службу Intent {CMP = com.remote.cat/.ActionService} U = 0: не найдено

Мой андроид версия ОС на устройстве 4.2.2

Я проверяю его с помощью этой команды в PowerShell:

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

Оба SERVI ces находятся в корне пакета 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; 
    } 
} 

ответ

1

Измените свою декларацию AutoStartServiceReceiver в манифесте как <receiver> rath чем <service>.

+0

это объявление службы. Я считаю, что это должно быть . Ну, я все равно попробовал. Не помогло ... :( Объявление получателя находится в теге . – GreenDeveloper

+0

В дополнение к тому, что получатель, объявленный как таковой в манифесте (а не услуге), ваше приложение также должно запускаться пользователем вручную в первый раз До тех пор, пока это не произойдет, система считает приложение отключенным и не выполнит загрузку. После того, как приложение начнет работу вашего приложения один раз, оно начнет доставку широковещательной передачи. –

0

Ошибка в вашем BroadcastReceiver классе

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

должно быть

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

EDIT

Я считаю, что вы должны объявить свои услуги внутри тега приложения, так как это часть заявки

+0

оба они верны: http: // разработчик. android.com/reference/android/content/Intent.html#ACTION_BOOT_COMPLETED – GreenDeveloper

+0

Я отредактировал свой ответ. –

Смежные вопросы