2016-04-26 2 views
1

Я пытаюсь сделать RemoteService, я после этого руководства: http://www.techotopia.com/index.php/Android_Remote_Bound_Services_%E2%80%93_A_Worked_ExampleService Намерение должно быть четко: Намерение

это мое заявление службы в манифесте:

<service android:name=".RemoteService" 
     android:process=":InnolertRemoteProcess" 
     android:exported="true"> 
     <intent-filter> 
      <action android:name="myService.RemoteService"/> 
      <category android:name="android.intent.category.DEFAULT"/> 
     </intent-filter> 
    </service> 

и это, как я привязать к службе из моего клиента приложения:

Intent intent = new Intent("myService.RemoteService"); 
bindService(intent, myConnection, Context.BIND_AUTO_CREATE); 

я получаю это исключение:

java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=myService.RemoteService } 
+0

вы должны использовать 'PackageManager' для того, чтобы получить явный' Intent', например, 'PackageManager # resolveService' или' PackageManager # queryIntentServices' – pskink

ответ

2

Я использовал это.

public static Intent createExplicitFromImplicitIntent(Context context, Intent implicitIntent) { 
//Retrieve all services that can match the given intent 
PackageManager pm = context.getPackageManager(); 
List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0); 

//Make sure only one match was found 
    if (resolveInfo == null || resolveInfo.size() != 1) { 
    return null; 
    } 

//Get component info and create ComponentName 
ResolveInfo serviceInfo = resolveInfo.get(0); 
String packageName = serviceInfo.serviceInfo.packageName; 
String className = serviceInfo.serviceInfo.name; 
ComponentName component = new ComponentName(packageName, className); 

//Create a new intent. Use the old one for extras and such reuse 
Intent explicitIntent = new Intent(implicitIntent); 

//Set the component to be explicit 
explicitIntent.setComponent(component); 

return explicitIntent; 
} 
+0

Решил проблему, спасибо. –

2

Для меня, следующая строка поможет мне: intent.setPackage ("myServicePackageName");

Для примера:

Intent intent = new Intent("com.something.REQUEST_SOMETHING"); 
    intent.setPackage("com.something"); 
    ctx.startService(intent); 
2

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

Intent i = new Intent(); 
i.setAction("myService.RemoteService"); 
i.setPackage("com.your_service_package.name"); 
boolean ret = bindService(i, connection, Context.BIND_AUTO_CREATE); 
Log.d(TAG, "initService() bound with " + ret);