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);
}
}