zym1021 2015-05-09 06:39 采纳率: 0%
浏览 680

启动多个service,如何知道哪个service是否启动

final boolean ServiceAOn = (PendingIntent.getService(_context, SERVICE_A_UNIQUE_ID,
new Intent(_context, ServiceA.class),
PendingIntent.FLAG_NO_CREATE) != null);
我想知道SERVICE_A的状态,是否已经启动,但是第一次有用,第二次就没用了

            附上代码:
            package com.example.test;

import java.text.SimpleDateFormat;
import java.util.Date;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;

import com.example.alarmmanagertest.R;
import com.example.service.ServiceA;
import com.example.service.ServiceB;
import com.example.service.ServiceC;

public class MainActivity extends Activity {
private Context _context;
private int SERVICE_A_TIME_INTERVAL = 10;
private int SERVICE_B_TIME_INTERVAL = 20;
private int SERVICE_C_TIME_INTERVAL = 30;
private int SERVICE_A_UNIQUE_ID = 0;
private int SERVICE_B_UNIQUE_ID = 1;
private int SERVICE_C_UNIQUE_ID = 2;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    _context = this;
    setContentView(R.layout.activity_main);
    initView();
}

private void initView() {
    Button btn_start_alarm = (Button) findViewById(R.id.btn_start_alarm);
    btn_start_alarm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            // Start all service
            fn_start_all_alarm();
        }
    });

    Button btn_stop_alarm = (Button) findViewById(R.id.btn_stop_alarm);
    btn_stop_alarm.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            fn_cancel_all_alarm();
        }
    });

    final boolean ServiceAOn = (PendingIntent.getService(_context, SERVICE_A_UNIQUE_ID,
            new Intent(_context, ServiceA.class),
            PendingIntent.FLAG_NO_CREATE) != null);
    Button btn_startOrStop_a = (Button) findViewById(R.id.btn_startOrStop_a);
    btn_startOrStop_a.setText(ServiceAOn == true ? "Stop Service A"
            : "Start Service A");
    btn_startOrStop_a.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            if (ServiceAOn == true) {
                fn_cancel_a_service();
                fn_refresh_activity();
            } else {
                fn_start_a_alarm();
                fn_refresh_activity();
            }
        }
    });

    final boolean ServiceBOn = (PendingIntent.getService(_context, SERVICE_B_UNIQUE_ID,
            new Intent(_context, ServiceB.class),
            PendingIntent.FLAG_NO_CREATE) != null);
    Button btn_startOrStop_b = (Button) findViewById(R.id.btn_startOrStop_b);
    btn_startOrStop_b.setText(ServiceBOn == true ? "Stop Service B"
            : "Start Service B");
    btn_startOrStop_b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            if (ServiceBOn == true) {
                fn_cancel_b_service();
                fn_refresh_activity();
            } else {
                fn_start_b_alarm();
                fn_refresh_activity();
            }
        }
    });

    final boolean ServiceCOn = (PendingIntent.getService(_context, SERVICE_C_UNIQUE_ID,
            new Intent(_context, ServiceC.class),
            PendingIntent.FLAG_NO_CREATE) != null);
    Button btn_startOrStop_c = (Button) findViewById(R.id.btn_startOrStop_c);
    btn_startOrStop_c.setText(ServiceCOn == true ? "Stop Service C"
            : "Start Service C");
    btn_startOrStop_c.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View arg0) {
            if (ServiceCOn == true) {
                fn_cancel_c_service();
                fn_refresh_activity();
            } else {
                fn_start_c_alarm();
                fn_refresh_activity();
            }
        }
    });
    return;
}

private void fn_start_all_alarm() {
    fn_start_a_alarm();
    fn_start_b_alarm();
    fn_start_c_alarm();
    fn_refresh_activity();
    return;

    /*****Please note that the 1.AlarmManager and 2.PendingIntent can reuse during setting alarm*******/
    /*long now = System.currentTimeMillis();
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    PendingIntent pi = PendingIntent.getService(_context,
            SERVICE_A_UNIQUE_ID, new Intent(_context, ServiceA.class),
            Intent.FLAG_ACTIVITY_NEW_TASK);
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, now,
            1000 * SERVICE_A_TIME_INTERVAL, pi);
    pi = PendingIntent.getService(_context, SERVICE_B_UNIQUE_ID,
            new Intent(_context, ServiceB.class),
            Intent.FLAG_ACTIVITY_NEW_TASK);
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, now,
            1000 * SERVICE_B_TIME_INTERVAL, pi);

    pi = PendingIntent.getService(_context, SERVICE_C_UNIQUE_ID,
            new Intent(_context, ServiceC.class),
            Intent.FLAG_ACTIVITY_NEW_TASK);
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, now,
            1000 * SERVICE_C_TIME_INTERVAL, pi);*/


}

private void fn_cancel_all_alarm() {
    fn_cancel_a_service();
    fn_cancel_b_service();
    fn_cancel_c_service();
    Toast.makeText(_context, "All service stopped", Toast.LENGTH_SHORT)
            .show();
    fn_refresh_activity();
    return;
}

private void fn_start_a_alarm() {
    long now = System.currentTimeMillis();
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    PendingIntent pi = PendingIntent.getService(_context,
            SERVICE_A_UNIQUE_ID, new Intent(_context, ServiceA.class),
            Intent.FLAG_ACTIVITY_NEW_TASK);
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, now,
            1000 * SERVICE_A_TIME_INTERVAL, pi);
    fn_write_log("A alarm start");
    return;
}

private void fn_start_b_alarm() {
    long now = System.currentTimeMillis();
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    PendingIntent pi = PendingIntent.getService(_context,
            SERVICE_B_UNIQUE_ID, new Intent(_context, ServiceB.class),
            Intent.FLAG_ACTIVITY_NEW_TASK);
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, now,
            1000 * SERVICE_B_TIME_INTERVAL, pi);
    fn_write_log("B alarm start");
    return;
}

private void fn_start_c_alarm() {
    long now = System.currentTimeMillis();
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    PendingIntent pi = PendingIntent.getService(_context,
            SERVICE_C_UNIQUE_ID, new Intent(_context, ServiceC.class),
            Intent.FLAG_ACTIVITY_NEW_TASK);
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, now,
            1000 * SERVICE_C_TIME_INTERVAL, pi);
    fn_write_log("C alarm start");
    return;
}

private void fn_refresh_activity() {
    ((Activity) _context).finish();
    Intent intent = new Intent(_context, MainActivity.class);
    ((Activity) _context).startActivity(intent);
}

private void fn_cancel_a_service() {
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    PendingIntent ServiceAIntent = PendingIntent.getService(_context,
            SERVICE_A_UNIQUE_ID, new Intent(_context, ServiceA.class),
            Intent.FLAG_ACTIVITY_NEW_TASK);
    alarmManager.cancel(ServiceAIntent);
    fn_write_log("A alarm stop");
    return;
}

private void fn_cancel_b_service() {
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    PendingIntent ServiceBIntent = PendingIntent.getService(_context,
            SERVICE_B_UNIQUE_ID, new Intent(_context, ServiceB.class),
            Intent.FLAG_ACTIVITY_NEW_TASK);
    alarmManager.cancel(ServiceBIntent);
    fn_write_log("B alarm stop");
    return;
}

private void fn_cancel_c_service() {
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    PendingIntent ServiceCIntent = PendingIntent.getService(_context,
            SERVICE_C_UNIQUE_ID, new Intent(_context, ServiceC.class),
            Intent.FLAG_ACTIVITY_NEW_TASK);
    alarmManager.cancel(ServiceCIntent);
    fn_write_log("C alarm stop");
    return;
}

private void fn_write_log(String log_msg) {
    ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);

    View clone_row = getLayoutInflater().inflate(R.layout.clone_row, null);

    TextView datetime = (TextView) clone_row.findViewById(R.id.datetime);
    TextView serviceText = (TextView) clone_row.findViewById(R.id.serviceText);

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String currentDateandTime = sdf.format(new Date());

    datetime.setText(currentDateandTime);
    serviceText.setText(log_msg);

    LinearLayout linlin_layout = (LinearLayout) scrollView.findViewById(R.id.linlin_layout);
    linlin_layout.addView(clone_row);
    return;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    return super.onOptionsItemSelected(item);
}

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥60 版本过低apk如何修改可以兼容新的安卓系统
    • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
    • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
    • ¥50 有数据,怎么用matlab求全要素生产率
    • ¥15 TI的insta-spin例程
    • ¥15 完成下列问题完成下列问题
    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?