AlarmManager与PendingInteng.getBroadcast及getActivity:
package com.example.alarmmanager;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.app.PendingIntent;
import android.app.AlarmManager;
import android.content.Intent;
import android.content.Context;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import android.util.Log;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btnBroadcast = (Button)findViewById(R.id.btnBroadcast);
btnBroadcast.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, new Intent("MYALARMRECEIVER"), Intent.FLAG_ACTIVITY_NEW_TASK);
long time = System.currentTimeMillis();
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, 3000, pi);
Log.d("btnBroadcast", "onClick");
}
});
Button btnActivity = (Button)findViewById(R.id.btnActivity);
btnActivity.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this, MyActivity.class);
PendingIntent pi = PendingIntent.getActivity(MainActivity.this, 0, intent, Intent.FLAG_ACTIVITY_NEW_TASK);
long time = System.currentTimeMillis();
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, 10000, pi);
Log.d("btnActivity", "onClick");
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
/*
public void onClick(View v) {
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
PendingIntent pi;
long time ;
switch (v.getId()) {
case R.id.btnBroadcast:
pi = PendingIntent.getBroadcast(MainActivity.this, 0, new Intent("MYALARMRECEIVER"), Intent.FLAG_ACTIVITY_NEW_TASK);
time = System.currentTimeMillis();
am.setInexactRepeating(AlarmManager.RTC_WAKEUP, time, 3000, pi);
Log.d("btnBroadcast", "onClick");
break;
case R.id.btnActivity:
Intent intent = new Intent(this, MyActivity.class);
pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
time = System.currentTimeMillis();
am.setRepeating(AlarmManager.RTC_WAKEUP, time, 3000, pi);
Log.d("btnActivity", "onClick");
}
}
*/
}
广播接收者:
package com.example.alarmmanager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
public class ActionBroadcaset extends BroadcastReceiver {
private static int num = 0;
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d("ActionBroadcast", "action:" + action);
if ("MYALARMRECEIVER".equals(action) == true) {
Log.d("ActionBroadcast", "New message " + (num++));
}
}
}
getActivity开启的Activity:
package com.example.alarmmanager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
public class MyActivity extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
Log.d("MyActivity", "onCreate");
}
}
用getBroadcast和getActivity要在配置文件中作些相应的添加:
<activity
android:name="com.example.alarmmanager.MyActivity"
android:label="@string/app_name">
</activity>
<receiver
android:name="ActionBroadcaset">
<intent-filter>
<action android:name="MYALARMRECEIVER"/>
</intent-filter>
</receiver>
其中的两个xml文件,activity_main.xml:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<Button
android:id= "@+id/btnBroadcast"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="广播Broadcast" />
<Button
android:id="@+id/btnActivity"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="72dp"
android:text="活动Activity" />
<Button
android:id="@+id/btnService"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/btnActivity"
android:layout_below="@+id/btnActivity"
android:layout_marginTop="36dp"
android:text="服务Service" />
</RelativeLayout>
activity_my.xml:
<?xml version="1.0" encoding="UTF-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
>
<TextView
android:id= "@+id/btnBroadcast"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="活动" />
</RelativeLayout>