Как запустить службу Android из другого приложения для Android

У меня возникла проблема с запуском службы из другого приложения для Android (API 17). Однако, если я запустил «am» из оболочки, сервис начнется нормально.

# am startservice com.xxx.yyy/.SyncService Starting service: Intent { act=android.intent.action.MAIN cat= [android.intent.category.LAUNCHER] cmp=com.xxx.yyy/.SyncService } (service starts fine at this point) # am to-intent-uri com.xxx.yyy/.SyncService intent:#Intent;action=android.intent.action.MAIN; category=android.intent.category.LAUNCHER; component=com.xxx.yyy/.SyncService;end 

Итак, похоже, что я ничего не теряю от намерения, когда я делаю то же самое в коде:

 Intent i = new Intent(); i.setAction(Intent.ACTION_MAIN); i.addCategory(Intent.CATEGORY_LAUNCHER); i.setComponent(new ComponentName("com.xxx.yyy", ".SyncService")); ComponentName c = ctx.startService(i); if (c == null) { Log.e(TAG, "failed to start with "+i); } 

То, что я получаю (служба в это время не работает):

 E/tag( 4026): failed to start with Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.xxx.yyy/.SyncService } 

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

Solutions Collecting From Web of "Как запустить службу Android из другого приложения для Android"

Вы должны начать свое обслуживание следующим образом:

 Intent i = new Intent(); i.setComponent(new ComponentName("com.xxx.yyy", "com.xxx.yyy.SyncService")); ComponentName c = ctx.startService(i); 

Если вы указываете конкретный компонент, вам не нужно устанавливать ACTION или CATEGORY. Убедитесь, что ваша служба правильно определена в манифесте.

EDIT Указанное полное имя класса согласно предложению VenomVendor