java.lang.IllegalArgumentException: Service Vorsatz muss explizit sein: Absicht
Ich versuche eine Verbindung zu meinem android-app für ein MS Band und ich erhalte die folgende Fehlermeldung:
java.lang.IllegalArgumentException: Service Intent must be explicit: Intent { act=com.microsoft.band.service.action.BIND_BAND_SERVICE }
Den code-snippet, das ich verwende, ist wie folgt:
private View.OnClickListener mButtonConnectClickListener = new View.OnClickListener() {
@Override
public void onClick(View button) {
pairedBands = BandClientManager.getInstance().getPairedBands();
bandClient = BandClientManager.getInstance().create(getApplicationContext(), pairedBands[0]);
//Connect must be called on a background thread.
new ConnectTask().execute();
}
};
private class ConnectTask extends AsyncTask<BandClient, Void, Void> {
@Override
protected Void doInBackground(BandClient... clientParams) {
BandPendingResult<ConnectionResult> pendingResult = null;
try {
pendingResult = bandClient.connect();
} catch (BandIOException e) {
e.printStackTrace();
}
try {
ConnectionResult result = pendingResult.await();
if(result == ConnectionResult.OK) {
BandConnection.setText("Connection Worked");
} else {
BandConnection.setText("Connection Failed");
}
} catch(InterruptedException ex) {
//handle InterruptedException
} catch(BandException ex) {
//handle BandException
}
return null;
}
protected void onPostExecute(Void result) {
}
}
Ich bin nach dem Beispiel in der Microsoft Band SDK, und ich bin neu in diesem. Jegliche Hilfe würde sehr geschätzt werden.
- Ich hasse es, ein überbringer schlechter neu, aber es sieht aus wie microsoft-Updates nicht sdk für android 5.0-Kompatibilität. in 5.0 können Sie nicht mehr tun, implizite intents und das ist, was es sieht aus wie das sdk ist dabei irgendwo. Sie müssen die Aktualisierung der sdk
- Möglich, Duplikat der Android L (API 21) - java.lang.IllegalArgumentException: Service Vorsatz muss eindeutig sein
Du musst angemeldet sein, um einen Kommentar abzugeben.
Obwohl @tyczj Kommentar ist absolut richtig, es fehlt ein workaround. Ich werde versuchen, das problem zu beschreiben, seinen Ursprung und eine (vorübergehende) Abhilfe in dieser Antwort.
Let ' s identifizieren Sie das problem zuerst. Irgendwo in den Interna des Band SDK einen Anruf, wie dies geschieht:
Einer implizite Absicht erstellt, und es wird verwendet, um zu binden, bis zu einem service. Leider, ab Android 5.0 ist es nicht mehr erlaubt, zu binden, zu Dienstleistungen verwendet implizite intents (wie in der beschriebenen API-änderungen hier). Stattdessen, die Absicht sollte sein explizite.
Da oben passiert tief im inneren des verborgenen band SDK und wir haben nicht die Quellen, dann ist es nicht trivial zu 'aktualisieren', den code zu verwenden, eine eindeutige Absicht. Wenn Sie technisch versiert genug sind, können Sie wahrscheinlich ändern Sie den Java-byte-code zu tun, aber ich würde gerne vorschlagen, eine andere Problemumgehung:
Da die Ausnahme, die ausgelöst durch
bindService()
und die Absicht ist, einen seiner Parameter, können wir überschreiben die Methode, um sicherzustellen, dass was auch immer Absicht geliefert wird, endet als explizite.Beispiel: der code unten sorgt dafür, dass jede Absicht, mit einer Aktion, die beginnt mit
com.microsoft.band
(einschließlich, aber nicht beschränkt aufcom.microsoft.band.service.action.BIND_BAND_SERVICE
), wird explizit gemacht durch die Einstellung der Paket-Namen.Können Sie jetzt mit diesem wrapper abfangen problematisch aufrufen und aktualisieren Sie die Absicht (falls erforderlich), indem Sie es auf die
BandClientManager
als 'Kontext' um den Dienst zu starten auf. Etwa so:Nun sollten Sie nicht mehr bekommen die
IllegalArgumentException
. Ich habe nicht das Microsoft Band selbst, so kann nicht garantieren, dass alles komplett funktioniert nach diesem, aber es sollte zumindest das problem lösen, skizzierte in Ihrem Frage.Tun, beachten Sie, dass dies sollte nur als temporäre Abhilfe. Wie bereits in einem der Kommentare, Microsoft sollte wirklich update der SDK erfüllen mit Android 5+. Das ist die einzige richtige Lösung. Bis dann, hoffentlich hilft.
com.microsoft.band
für mich gearbeitet.Falls sich jemand mit Xamarin.Android:
Dann, es zu benutzen:
Hier bin ich mit dem http://components.xamarin.com/view/microsoft-band-sdk