Подтвердить что ты не робот

Android: не удалось запустить сервисное намерение: не найден?

Я знаю, что я не первый, с этой проблемой, но я пробовал так много решений, я нашел и никто не работает... возможно, вы могли бы найти ошибку

Ошибка (также появилась так без .class и с /.Client в зависимости от других настроек)

12-02 16: 40: 15.359: W/ActivityManager (74): не удается запустить сервис Intent {act = com.android.fh.EnOceanApp.Client.class}: не найден

В манифесте это включено в приложение, из действий (пробовал его также в действиях и с ".Client"   

Код в onCreate()

    startService(new Intent(this, Client.class)); 

или

 startService(new Intent(this.getApplicationContext(), Client.class));

или

Intent intent=new Intent("com.android.fh.EnOceanApp.Client.class");
    this.startService(intent);

или

  Intent intent=new Intent("com.android.fh.EnOceanApp.Client");
    this.startService(intent);

И теперь у меня больше нет идеи. com.android.fh.EnOceanApp - это пакет, Client.java - служебный класс в этом пакете

и манифест я забыл:

  <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:label="@string/app_name"
            android:name=".EnOceanAppActivity" >
            <intent-filter >
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>      
        </activity>

      <activity android:name=".ListView" 
          android:label="List View">
      </activity> 
      <activity android:name=".GraphView" 
          android:label="Graph View">
      </activity>
      <service 
            android:name=".Client"></service> //with and without ., of course without this comment
    </application>
4b9b3361

Ответ 1

Итак, просто чтобы помочь другим или нет:

Я сделал новый проект, скопировал источники и попытался запустить его: служба была найдена сейчас. Какая разница, или, другими словами: что я думаю, может вызвать проблемы: длинное имя пакета или начало с com.android... В новом проекте я просто выбрал com.enocean

Ответ 2

Спасибо пользователю njzk2 за то, что я заметил, что происходит.

У меня была такая же проблема. Кажется, что ОС Android не может найти запрошенный класс услуг, если вы еще не зарегистрировались в файле манифеста вашего проекта.

Помните, что служба похожа на активность, но без графического интерфейса. Это означает, что службы должны быть зарегистрированы, прежде чем вы сможете их использовать.

Вот как вы зарегистрировали услугу в своем проекте Android:

<application>
    <!-- your code -->
    <activity>
        <!-- your code  -->
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name="com.your.own.service.class"></service>
</application>

Просто запомните, что класс YourService должен быть удален из Сервиса, если ваш класс не будет сервисом.

public class YourService extends Service{}

Ответ 3

Иногда вам нужно полностью квалифицировать имя класса в манифесте, а не использовать короткую форму (.classname). Я видел это, когда я использовал классы из другого пакета, но, возможно, это поможет здесь, поскольку намерение службы может выйти за пределы приложения.

Ответ 4

Несмотря на ВСЕ ответы в этом сообщении и многие связанные с ними Невозможно запустить сервисное намерение: не найдено Невозможно запустить Service Intent, я все еще боролся, и мне потребовалось некоторое время, чтобы добиться этого. Мой сценарий был несколько более сложным, так как я пытаюсь запустить службу в РАЗЛИЧНОМ приложении, с которым я звоню. Я понял это, и здесь ВСЕ детали, а также некоторый бонусный код.

MainActivity назначения вызова (или везде)

Intent intent=new Intent("com.example.core.MusicService.1234");
//Or Intent intent=new Intent("com.example.core.MusicService.TOGGLE_PLAYBACK");
PendingIntent pendingIntent = PendingIntent.getService(this, 99, intent, PendingIntent.FLAG_CANCEL_CURRENT);

Манифест: службы (тег службы внутри тега приложения) Это

    <service android:name="com.example.core.MusicService">
        <intent-filter>
            <action android:name="com.example.core.MusicService1234"></action>
        </intent-filter>
        <intent-filter>
            <action android:name="com.example.core.MusicService.TOGGLE_PLAYBACK"></action>
        </intent-filter>
    </service>

MusicService.java

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    if(intent != null){
        if(intent.getAction() != null){
            if(intent.getAction().contentEquals("com.example.core.MusicService.TOGGLE_PLAYBACK")){
                //Do work here
            }
        }
    }
}

Примечания

  • Служба НЕ должна запускаться, это намерение начнется.
  • "com.example.core.MusicService1234" и "com.example.core.MusicService.TOGGLE_PLAYBACK" могут быть любыми, что вы хотите, но, очевидно, необходимо согласовать фильтр намерений в манифесте службы с намерением вызова, Вы можете поместить несколько из них, чтобы вы могли выполнять различные действия, когда ваш сервис запускается в зависимости от значения вашего намерения.
  • 99 может быть любым, что вы хотите, но должен быть уникальным, если вы используете уведомления
  • Я не уверен, что можно вызвать услугу в другом приложении (например, это) без использования фильтра намерения - если это так, кто-то, пожалуйста, просветит нас. Я пробовал, и он не работает.

Кредит: кумулятивная информация со всех сообщений:)

Ответ 5

Я сделал глупую ошибку добавления ярлыка в отдельный манифест.

В этом случае текущему приложению не удалось найти определенную службу.

Надеюсь, что вы пропустите эту ошибку:)

Спасибо.

Ответ 6

Это глупая ошибка андроида

Это не сработает

<service
            android:name=".classname"/>

Но это будет работать, есть отдельный закрывающий тег

<service
            android:name=".classname"></service>

Ответ 7

Ну, в моем случае мне пришлось очистить проект. Иногда это случается, когда вы создали новый класс Java для службы в своем пакете/проекте, но не создали/не очистили послесловие к проекту. В моем случае мне просто нужно было очистить проект, чтобы избавиться от ошибки.

Ответ 8

Если кто-то видит это и имеет ту же проблему, что и я, это потому, что я следовал за гидом и использовал context.startService() вместо context.startActivity()