1、示例演示ALARM_SERVICE、KEYGUARD_SERVICE、POWER_SERVICE的用法
1)MainActivity.java
/**
* 在onCreate设置新闹铃
* 点击按钮打开手机内置Clock,可设置新闹铃
*/
public class MainActivity extends Activity {
PendingIntent mPendingIntent;
AlarmManager mAlarmManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAlarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//在广播中启动新Activity,在新Activity启动闹铃
mPendingIntent = PendingIntent.getBroadcast(this, 0,
new Intent(AlarmReceiver.ACTION_ALARM_ACTIVITY).putExtra("msg", "Time's up!"), 0);
CheckBox checkBox = (CheckBox) findViewById(R.id.btn_on_off);
checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
buttonView.setText("已打开");
mAlarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime()+10000L, mPendingIntent);
}else{
buttonView.setText("未开启");
mAlarmManager.cancel(mPendingIntent);
}
}
});
}
public void onClick(View v){
switch (v.getId()) {
case R.id.btn_callAlarmClock:
//从一个Activity打开另一个Activity
startActivity(new Intent(AlarmClock.ACTION_SET_ALARM));
break;
}
}
}
2)AlarmReceiver.java
public class AlarmReceiver extends BroadcastReceiver {
private static final String TAG = AlarmReceiver.class.getSimpleName();
public static final String ACTION_ALARM_ACTIVITY = "action.alarm.activity";
@Override
public void onReceive(Context context, Intent intent) {
if(ACTION_ALARM_ACTIVITY.equals(intent.getAction())){
Log.d(TAG, intent.getStringExtra("msg"));
Intent intent2 = new Intent(context, MyActivity.class);
intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent2);
}
}
}
3)MyActivity.java
/**
* 1、在onCreate启动闹铃
* 2、点击按钮可选择关闭闹铃
*/
public class MyActivity extends Activity {
private MediaPlayer player;
PowerManager.WakeLock wl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_me);
/*1*/player = new MediaPlayer();
try {
/*2*/player.setDataSource(this, RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM));
/*3*/player.prepare();
player.setLooping(true);
/*4*/player.start();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//解锁屏幕
KeyguardManager km = (KeyguardManager)getSystemService(Context.KEYGUARD_SERVICE);
KeyguardManager.KeyguardLock kl = km.newKeyguardLock("unLock");
kl.disableKeyguard();
//点亮屏幕并保持
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "MyWakeLock");
wl.acquire();
}
public void onClick(View v){
switch (v.getId()) {
case R.id.btn:
new AlertDialog.Builder(this).setTitle("ֹͣ是否关闭闹钟?")
.setPositiveButton("关闭", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
player.stop();
}
}).setNegativeButton("继续", null).show();
break;
case R.id.btn_release:
wl.release();
break;
default:
break;
}
}
}
4)activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:id="@+id/btn_callAlarmClock"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="打开手机内置时钟"
android:onClick="onClick"/>
<CheckBox
android:id="@+id/btn_on_off"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="未开启"
android:checked="false"/>
</LinearLayout>
5)activity_me.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="关闭"/>
<Button
android:id="@+id/btn_release"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="release"/>
</LinearLayout>
6)AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.qinuli.alarmtest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="9"
android:targetSdkVersion="19" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.DISABLE_KEYGUARD"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.qinuli.alarmtest.MainActivity"
android:label="@string/app_name"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.qinuli.alarmtest.AlarmReceiver">
<intent-filter>
<action android:name="action.alarm.activity"/>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
</receiver>
<activity android:name="com.qinuli.alarmtest.MyActivity"></activity>
</application>
</manifest>