我在这里看到了几个类似的例子,但似乎无法让我的服务与活动绑定。
我收到错误
“android.os.binderproxy无法转换为IC_CommissaryService”。
我的服务如下:
public class IC_CommissaryService extends Service
{
@Override
public IBinder onBind(Intent intent)
{
return mBinder;
}
private final IBinder mBinder = new LocalBinder();
public class LocalBinder extends Binder
{
IC_CommissaryService getService()
{
return IC_CommissaryService.this;
}
}
public int onStartCommand(Intent intent, int flags, int startId)
{
}
private boolean SendOrderToServer(int orderID)
{
/* do stuff*/
}
}
我的活动如下:
public class SubmitOrders extends Activity
{
IC_CommissaryService ICservice;
@Override
public void onCreate(Bundle savedInstanceState)
{
Intent serviceintent = new Intent(this, IC_CommissaryService.class);
serviceintent.putExtra("binded", true);
bindService(serviceintent, mConnection, Context.BIND_AUTO_CREATE);
}
private ServiceConnection mConnection = new ServiceConnection()
{
@Override
public void onServiceConnected(ComponentName className, IBinder service)
{
Log.e("TEST", "SERVICE CONNECTED");
try
{
ICservice =(IC_CommissaryService.LocalBinder)service).getService();
for(int i = 0; i < Submitorders.size(); i++)
{
ICservice.SendOrderToServer(Submitorders.get(i).intValue());
}
}
catch(Exception ex)
{
Log.e("Error", "Error connecting service: " + ex.getMessage());
}
}
@Override
public void onServiceDisconnected(ComponentName className)
{
}
};
}
我在ICservice =(IC_CommissaryService.LocalBinder)service).getService();
我想我已经和其他帖子中已经提到过的人一样,所以请帮忙吗?
感谢
答案 0 :(得分:1)
我遇到了同样的问题。我今天才弄明白。请查看以下<<=====
注释的部分。我希望它有所帮助。
public class PracticeServiceBindingActivity extends ListActivity {
private MyService.MyBinder service; <<====
....
private ServiceConnection connection = new ServiceConnection( ){
public void onServiceConnected (ComponentName name, IBinder service) {
setService(MyService.MyBinder) service; <<====
....
}
}
public void onCreate(....) {
...
public MyService.MyBinder getService(){ <<=====
return service;
}
public void setService(MyService.MyBinder service) { <<=====
this.service = service;
}
}
}
答案 1 :(得分:0)
来自约束服务documentation的引用:
如果您的服务是您自己的应用程序的私有服务并且在该服务中运行 与客户端(这是常见的)相同的过程,你应该创建你的 接口通过扩展Binder类并返回一个实例 来自onBind()。
删除AndroidManifest.ml中的android:process属性,使服务在同一进程中运行。我今天也遇到了同样的问题。
答案 2 :(得分:0)
这些是我用来解决这个问题的抽象类: https://gist.github.com/frenchie4111/6086c6e4327d7936364a
只需使用您的服务和活动扩展这两个类(您可以轻松地将片段从片段更改为活动)。并确保在您的service / fragment onCreate中设置serviceClass,如下所示:
public void onCreate( Bundle savedInstance ) {
super.onCreate( savedInstance );
this.serviceClass = IC_CommissaryService.class;
}