Android: не удалось запустить сервисное намерение: не найдено? - PullRequest
16 голосов
/ 02 декабря 2011

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

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

12-02 16: 40: 15.359: W / ActivityManager (74): невозможно запустить службу Намерение {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>

Ответы [ 8 ]

21 голосов
/ 20 октября 2012

Спасибо пользователю 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{}
4 голосов
/ 03 декабря 2011

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

2 голосов
/ 04 декабря 2011

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

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

1 голос
/ 17 января 2015

Несмотря на ВСЕ ответы в этом посте и многие другие связанные Невозможно запустить сервисное намерение: не найдено Невозможно запустить сервисное намерение , я все еще боролся, и мне потребовалось некоторое время, чтобыПолучите это.Мой сценарий был немного более сложным, так как я пытаюсь запустить службу в другом приложении, с которым я звоню.Я понял это, и здесь ВСЕ детали, вместе с бонусным кодом.

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 может быть любым, но вы должны быть уникальными, если вы используете уведомления
  • Я не уверен, что можно вызвать службу в другом приложении (например, таком) без использования фильтра намерений - если это так, кто-то, пожалуйста, просветите нас.Я пытался, и это не работает.

Благодарность: накопленная информация из всех сообщений:)

0 голосов
/ 29 апреля 2016

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

0 голосов
/ 01 марта 2015

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

0 голосов
/ 12 февраля 2015

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

Это не будет работать

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

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

<service
            android:name=".classname"></service>
0 голосов
/ 14 марта 2014

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

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

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

Спасибо.

...