gpt4 book ai didi

Android 通过 Activity 控制一个服务

转载 作者:行者123 更新时间:2023-11-30 03:39:45 25 4
gpt4 key购买 nike

对于聊天应用程序,我需要管理用户与网络服务之间通信的服务。我决定使用通常的 Android 服务组件。

我现在如何启动服务,我也知道如何从服务向 Activity 发送消息,但如何从 Activity 控制服务?例如。用户发送一条消息,所以我必须让服务发送,例如包含消息的 http 请求。或者用户想要结束聊天 session ,因此 Activity 必须让服务发送包含结束聊天 session 的命令的请求。

最佳答案

你可以使用AIDL http://developer.android.com/guide/components/aidl.html

在 AIDL 中,您可以在服务中实现方法,并通过 Binder 从 Activity 中调用这些方法。

所以在你的情况下,1) 在服务中实现 sendMessage(String msg)

2)在aidl文件中声明此方法并从服务中调用

mService.sendMessage(msg);

不使用 AIDL 进行编辑:

服务等级

public class LocalService extends Service {
private final IBinder mBinder = new LocalBinder();
private final Random mGenerator = new Random();
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return mBinder;
}

public class LocalBinder extends Binder{
LocalService getService(){
return LocalService.this;
}
}

public int getRandomNumber()
{
return mGenerator.nextInt(100);
}

}

Activity 类

public class BindingActivity extends Activity {
LocalService mService;
boolean mbound = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_binding);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_binding, menu);
return true;
}

@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Intent intent = new Intent(this, LocalService.class);
bindService(intent,mConnection,Context.BIND_AUTO_CREATE);

}

@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
if(mbound)
{
unbindService(mConnection);
mbound = false;
}
}
private ServiceConnection mConnection = new ServiceConnection(){


@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
LocalBinder binder = (LocalBinder)service;
mService = binder.getService();
mbound = true;
}

@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
mbound = false;

}
};

public void onClick(View view)
{
if(mbound)
{
int num = mService.getRandomNumber();
Toast.makeText(this, "number: "+num, Toast.LENGTH_SHORT).show();
}
}
}

关于Android 通过 Activity 控制一个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com