Le service de liaison Android retourne false à chaque fois
boolean isBound = bindService(new Intent(SocketServiceController.this, SocketService.class), mConnection, Context.BIND_AUTO_CREATE);
Service Bind renvoie toujours false pour moi... quelqu'un Pourrait-il me dire les erreurs que j'ai prise...
Service code est comme suit
public class SocketService extends Service{
@Override
public IBinder onBind(Intent arg0) {
//TODO Auto-generated method stub
return myBinder;
}
private final IBinder myBinder = new LocalBinder();
public class LocalBinder extends Binder {
public SocketService getService() {
return SocketService.this;
}
}
@Override
public void onCreate() {
super.onCreate();
}
public void IsBoundable(){
Toast.makeText(this,"Is bound", Toast.LENGTH_LONG).show();
}
public void onStart(Intent intent, int startId){
super.onStart(intent, startId);
Toast.makeText(this,"Service created ...", Toast.LENGTH_LONG).show();
}
@Override
public void onDestroy() {
super.onDestroy();
}
}
Service de Contrôleur de code est comme suit:
public class SocketServiceController extends Activity{
private SocketService mBoundService;
private Boolean mIsBound;
public SocketServiceController ssc;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ssc = this;
setContentView(R.layout.telnet);
Button startButton = (Button)findViewById(R.id.button1);
Button endButton = (Button)findViewById(R.id.button2);
Button bindButton = (Button)findViewById(R.id.button3);
startButton.setOnClickListener(startListener);
endButton.setOnClickListener(stopListener);
//bindButton.setOnClickListener(this);
TextView textView = (TextView)findViewById(R.id.textView1);
}
private ServiceConnection mConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
mBoundService = ((SocketService.LocalBinder)service).getService();
}
@Override
public void onServiceDisconnected(ComponentName className) {
mBoundService = null;
}
};
private void doBindService() {
boolean isBound = bindService(new Intent(SocketServiceController.this, SocketService.class), mConnection, Context.BIND_AUTO_CREATE);
mIsBound = true;
//mBoundService.IsBoundable();
}
private void doUnbindService() {
if (mIsBound) {
//Detach our existing connection.
unbindService(mConnection);
mIsBound = false;
}
}
private OnClickListener startListener = new OnClickListener() {
public void onClick(View v){
startService(new Intent(SocketServiceController.this,SocketService.class));
doBindService();
}
};
private OnClickListener stopListener = new OnClickListener() {
public void onClick(View v){
stopService(new Intent(SocketServiceController.this,SocketService.class));
}
};
@Override
protected void onDestroy() {
super.onDestroy();
doUnbindService();
}
}
source d'informationauteur Arun Abraham | 2011-03-15
Vous devez vous connecter pour publier un commentaire.
Je pense que le problème est peut-être bien que la liaison du service.Je m en utilisant le code suivant pour lier le service.Son retour véritable correctement.
mService -est l'objet de service,
mConnection - est serviceConnection objet
Mode
Il pourrait y avoir un petit changement dans votre code
Il pourrait fonctionner..
Passez une excellente journée...
J'ai eu le même problème. Après un temps de mes études, j'ai découvert que notre application ne savez pas quel service pour être lié. Ce est soit parce que nous n'avons pas déclarer le service dans le fichier de manifeste, ou nous avons déclaré dans le mauvais sens.
Dans mon cas, je le déclare comme:
De cette manière, Android va comprendre que le service a le paquet comme
vn.abc.SocketService
mais en fait, dans ma structure de code, mon service a le paquetcom.tung.SocketService
(paquets ne sont que des exemples). C'est la raison pour laquelle Android ne peut pas trouver le service que j'ai déclaré dans le fichier manifest.J'ai eu une erreur similaire. Il s'est avéré être en raison de la différence entre ces deux blocs de code:
et:
Le premier bloc ne fonctionne pas, le deuxième bloc.
J'espère que cela vous aide à économiser de quelqu'un d'autre les heures il a fallu que je voie cela.
Un cas très commun dans lequel bindService() retourne faux est si le service n'a pas été déclarée dans le Manifeste. Dans ce cas, vous devez déclarer à votre service dans le fichier de manifeste.
J'ai résolu le problème en faisant un nouveau projet et copie le code dans. Probablement le problème était lié à un nom de package.
Étrangement sur Android Studio, j'ai eu la situation suivante (projet ne fonctionne pas):
Ce étrangement bloqué le serveur pour être vu en dehors de l'app
Dans le nouveau projet que j'avais (de travail):
notez que le nom de l'application est le dernier élément de l'emballage.
La première situation a permis à l'application exécuté correctement, pour envoyer des messages au service, mais de ne pas accéder au service à partir d'une autre application (le drapeau android:exportées="true" a été correctement définie dans les deux cas)
je pense que le service de drapeau est mauvais réglage.
vous devez définir le drapeau à vous de connexion de service .
};
j'avais fait une simple exampl sur github .
https://github.com/wingsum93/Bind_Service_Example
J'ai eu le même message d'erreur et la raison en est que j'ai oublié de démarrer le service.