几乎没有活动的Android服务

时间:2015-11-12 07:17:49

标签: android android-service

我正在尝试创建一个包含一些活动的应用程序:

  • DashboardActivity
  • SettingsActivity
  • ....

并使用一项服务(在手机和我的设备之间传输数据)。

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中执行此操作?

如何将任务从不同的活动发送到一个服务并将数据重新发送到这些活动?

1 个答案:

答案 0 :(得分:0)

我曾经使用带有不同片段的容器Activity来创建应用程序,并且我将广播和广播接收器的注册放在此容器活动中,以便我的片段可以共享此广播接收器。但是,我应该在我的活动中注册广播之前启动我的服务,或者在应用程序之外的系统启动它。

我想说的是,您应该设计数据结构。如果您希望您的应用中的活动共享一个广播接收器,我建议您在清单中放置此启动服务,广播和广播接收器注册等。