Android 为少数活动提供服务
Android service for few activities
我正在尝试创建一个包含一些活动的应用程序:
- DashboardActivity
- 设置活动
- .....
并使用一项服务(在 phone 和我的设备之间传输数据)。
public class MyService extends Service {
....
public int onStartCommand(Intent intent, int flags, int startId) {
int time = intent.getIntExtra(DashboardActivity.PARAM_TIME, 1);
int task = intent.getIntExtra(DashboardActivity.PARAM_TASK, 0);
String strMAC = intent.getStringExtra(DashboardActivity.PARAM_MAC);
String strMESS = intent.getStringExtra(DashboardActivity.PARAM_MESSAGE);
....
}
所以我可以从 DashboardActivity 启动我的服务。建立连接,获取数据。
但是我需要在SettingActivity中启动SettingsActivity时获取这些数据。
在我的 DashboardActivity 中,我有一个广播接收器:
// create BroadcastReceiver
br = new BroadcastReceiver() {
// действия при получении сообщений
public void onReceive(Context context, Intent intent) {
int task = intent.getIntExtra(PARAM_TASK, 0);
int status = intent.getIntExtra(PARAM_STATUS, 0);
//Log.d(LOG_TAG, "onReceive: task = " + task + ", status = " + status);
// looking for start status
if (status == STATUS_START) {
switch (task) {
case TASK1_CODE:
tvTask1.setText("Task1 start" + connectionSTATE);
break;
case TASK2_CODE:
tvTask2.setText("Task2 start"+connectionSTATE);
break;
case TASK3_CODE:
tvTask3.setText("Task3 start"+connectionSTATE);
break;
}
}
// looking for result status
if (status == STATUS_FINISH) {
//String result = intent.getStringExtra(PARAM_RESULT);
int[] result = intent.getIntArrayExtra(PARAM_RESULT);
switch (task) {
case TASK1_CODE:
tvTask1.setText("Task1 finish, result = " + Arrays.toString(result)+" "+connectionSTATE);
break;
case TASK2_CODE:
tvTask2.setText("Task2 finish, result = " + Arrays.toString(result)+" "+connectionSTATE);
break;
case TASK3_CODE:
tvTask3.setText("Task3 finish, result = " + Arrays.toString(result) + " " + connectionSTATE);
myView.setLabelText(Arrays.toString(result));
//String message =Integer.toHexString(result[1]);
onClicksent_data(Integer.toHexString(result[1]));
break;
}
}
}
};
// Filter BroadcastReceiver
IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION);
// turnOn BroadcastReceiver
registerReceiver(br, intFilt);
如何在 SettingsActivity 中执行此操作?
如何将任务从不同的活动发送到一项服务并将响应数据发送到这些活动?
我曾经使用容器 Activity 和不同的片段创建一个应用程序,我将广播和广播接收器的注册放在这个容器 activity 中,以便我的片段可以共享这个广播接收器。但是,我应该在我的 activity 广播注册之前启动我的服务,或者通过应用程序外部的系统启动它。
我想说的是,你应该设计你的数据结构。如果你想让你的app中的activity共享一个broadcastreceiver,我建议你把这个启动服务,广播和broadcastreceiver的注册等放在你的manifest中。
我正在尝试创建一个包含一些活动的应用程序:
- DashboardActivity
- 设置活动
- .....
并使用一项服务(在 phone 和我的设备之间传输数据)。
public class MyService extends Service {
....
public int onStartCommand(Intent intent, int flags, int startId) {
int time = intent.getIntExtra(DashboardActivity.PARAM_TIME, 1);
int task = intent.getIntExtra(DashboardActivity.PARAM_TASK, 0);
String strMAC = intent.getStringExtra(DashboardActivity.PARAM_MAC);
String strMESS = intent.getStringExtra(DashboardActivity.PARAM_MESSAGE);
....
}
所以我可以从 DashboardActivity 启动我的服务。建立连接,获取数据。 但是我需要在SettingActivity中启动SettingsActivity时获取这些数据。
在我的 DashboardActivity 中,我有一个广播接收器:
// create BroadcastReceiver
br = new BroadcastReceiver() {
// действия при получении сообщений
public void onReceive(Context context, Intent intent) {
int task = intent.getIntExtra(PARAM_TASK, 0);
int status = intent.getIntExtra(PARAM_STATUS, 0);
//Log.d(LOG_TAG, "onReceive: task = " + task + ", status = " + status);
// looking for start status
if (status == STATUS_START) {
switch (task) {
case TASK1_CODE:
tvTask1.setText("Task1 start" + connectionSTATE);
break;
case TASK2_CODE:
tvTask2.setText("Task2 start"+connectionSTATE);
break;
case TASK3_CODE:
tvTask3.setText("Task3 start"+connectionSTATE);
break;
}
}
// looking for result status
if (status == STATUS_FINISH) {
//String result = intent.getStringExtra(PARAM_RESULT);
int[] result = intent.getIntArrayExtra(PARAM_RESULT);
switch (task) {
case TASK1_CODE:
tvTask1.setText("Task1 finish, result = " + Arrays.toString(result)+" "+connectionSTATE);
break;
case TASK2_CODE:
tvTask2.setText("Task2 finish, result = " + Arrays.toString(result)+" "+connectionSTATE);
break;
case TASK3_CODE:
tvTask3.setText("Task3 finish, result = " + Arrays.toString(result) + " " + connectionSTATE);
myView.setLabelText(Arrays.toString(result));
//String message =Integer.toHexString(result[1]);
onClicksent_data(Integer.toHexString(result[1]));
break;
}
}
}
};
// Filter BroadcastReceiver
IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION);
// turnOn BroadcastReceiver
registerReceiver(br, intFilt);
如何在 SettingsActivity 中执行此操作?
如何将任务从不同的活动发送到一项服务并将响应数据发送到这些活动?
我曾经使用容器 Activity 和不同的片段创建一个应用程序,我将广播和广播接收器的注册放在这个容器 activity 中,以便我的片段可以共享这个广播接收器。但是,我应该在我的 activity 广播注册之前启动我的服务,或者通过应用程序外部的系统启动它。
我想说的是,你应该设计你的数据结构。如果你想让你的app中的activity共享一个broadcastreceiver,我建议你把这个启动服务,广播和broadcastreceiver的注册等放在你的manifest中。