2014-10-14 3 views
0

Я пытаюсь запустить связанный (в конечном счете удаленный) сервис Android через Intent. Если я создаю Intent со ссылкой на класс Service (см. Переменную ii ниже), он работает. Если я создаю Intent, используя Строки для имени класса, bindService терпит неудачу.Как запустить связанный сервис с помощью намерения без класса

В конечном счете, я хочу, чтобы второе приложение получило доступ к моему сервису, который не будет иметь класс Service внутри него (это то, как работают удаленные сервисы ...? Не так ли?) - следовательно, желание создать Intent без ссылки на объект класса.

 //this Intent works 
     Intent ii = new Intent(this, MyService.class); 

     //this Intent doesn't 
     Intent i = new Intent(); 
     i.setClassName("com.ghee", "MyService"); 

     boolean b = bindService(ii, 
       mSvcConn, 
       Context.BIND_AUTO_CREATE); 

     if(!b) { 
      Log.d(TAG, "bindService returned false..."); 
     } 

Если это помогает, вот большинство манифеста:

<application android:icon="@drawable/icon"> 
    <activity android:name=".MyActivity" 
       android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <action android:name="com.ghee.MyService" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    </activity> 

    <service android:name=".MyService" 
     android:exported="true" 
     android:process=":remote"> 
    </service> 
</application> 
+0

попробовать Intent.setClassName (Context packageContext, String Classname), и вы увидите, где вы не удалось – pskink

ответ

2

Вы должны указать полный путь к классу, а не только его имя. Это кажется контр-интуитивным, потому что вы уже указываете пакет в параметре 1, но ... ну ладно.

Попробуйте это:

i.setClassName("com.ghee", "com.ghee.MyService"); 
Смежные вопросы