2016-04-26 19 views
1

Ich versuche, eine Remoteservice zu machen, habe ich diese Anleitung gefolgt: http://www.techotopia.com/index.php/Android_Remote_Bound_Services_%E2%80%93_A_Worked_ExampleService-Intent muss eindeutig sein: Intent

dies ist mein Service Erklärung im Manifest:

<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> 

und dies ist, wie i binden an den Service von meinem Client-Anwendung:

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

ich diese Ausnahme erhalten:

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

Sie haben eine 'PackageManager', um zu verwenden, um explizit' Intent', zum Beispiel zu bekommen 'Packagemanager # resolveService' oder' Package # queryIntentServices' – pskink

Antwort

2

ich habe das verwendet.

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

Das Problem wurde behoben. –

2

Für mich ist die nächste Zeile mir helfen: intent.setPackage ("myServicePackageName");

Beispiel:

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

Versuchen Sie folgendes:

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); 
Verwandte Themen