Android Bind Service每次都返回false

boolean isBound = bindService(new Intent(SocketServiceController.this, SocketService.class), mConnection, Context.BIND_AUTO_CREATE); 

绑定服务总是为我返回假…有人能告诉我可能出现的错误……

服务代码如下

 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(); } 

}

服务控制器代码如下:

  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(); } 

}

  • kotlin-stdlib-jre7已弃用。 请改用kotlin-stdlib-jdk7
  • 在Android的谷歌浏览器中,如何设置不安全 - 治疗 - 不安全 - 原始 - 安全
  • 如何在android中使用filepath将图像设置为imageView
  • 如何使用Eclipse和HTC Desire HD在PhoneGap应用程序中显示console.log()输出?
  • 适用于Android的Google Play音乐API
  • 在Android Chrome中停用unicode替换表情符号?
  • getQuantityString不用值替换格式
  • Android - 从方形位图剪切圆圈
  • 我认为问题可能在绑定服务时。我使用以下代码绑定服务。它正确返回true。

     boolean flag=bindService(mService, mConnection, MODE_PRIVATE); 

    mService是服务对象,mConnection-是serviceConnection对象模式

    您的代码可能会有一些小变化

     boolean isBound = bindService(mBoundService, mConnection, Context.BIND_AUTO_CREATE); 

    它可能会工作..祝你有美好的一天……

    我有同样的问题。 经过一段时间的学习,我发现我们的应用程序不知道要绑定哪个服务。 这是因为要么我们没有在清单文件中声明服务,要么我们以错误的方式声明它。

    就我而言,我声明为:

       

    通过这种方式,Android将了解该服务将包作为vn.abc.SocketService ,但实际上,在我的代码结构中,我的服务包含com.tung.SocketService包(这里的包只是示例)。 这就是Android无法find我在清单文件中声明的服务的原因。

    bindService()返回false的一个非常常见的情况是服务未在Manifest中声明。 在这种情况下,您应该在清单文件中声明您的服务。

      ...   ...   

    我有类似的错误。 原来这是由于这两个代码块之间的差异:

     @Override public IBinder onBind(Intent arg0) { return new MyBinder(); } 

    和:

     private final IBinder mBinder = new MyBinder(); @Override public IBinder onBind(Intent arg0) { return mBinder; } 

    第一个块不起作用,第二个块起作用。

    我希望这有助于拯救别人花费我跟踪它的时间。

    我解决了执行新项目并将代码复制到其中的问题。 可能问题与包名有关。

    奇怪的是在Android Studio上我遇到以下情况(项目不能正常工作):

    • 包的名称:com.company.proj.server
    • 应用程序名称:speedtest
    • 服务器名称:syncserver

    这奇怪地阻止了服务器在应用程序外部看到

    在我工作的新项目中:

    • 包的名称:com.company.proj.server.speedtest
    • 应用程序名称:speedtest
    • 服务器名称:syncserver

    注意应用程序的名称是包的最后一个元素。

    第一种情况允许应用程序正确执行,向服务发送消息但不从其他应用程序访问服务(在两种情况下都正确设置了标志android:exported =“true”)

    我认为绑定服务标志设置错误。 您应该在服务连接中设置标志。

      private ServiceConnection mServiceConnection = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { mServiceBound = false; } @Override public void onServiceConnected(ComponentName name, IBinder service) { BoundService.MyBinder myBinder = (BoundService.MyBinder) service; mBoundService = myBinder.getService(); mServiceBound = true; } 

    };

    我在github上做了一个简单的例子。 https://github.com/wingsum93/Bind_Service_Example

    我有同样的错误,原因是我忘了启动服务。