电话TelephonyManager:
<receiver android:name=".PhoneReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
</intent-filter>
</receiver>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"></uses-permission>
public class PhoneReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
if(intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)){
// outgoing call
} else {
// incoming call
TelephonyManager tm = (TelephonyManager)context.getSystemService(Service.TELEPHONY_SERVICE);
tm.listen(new PhoneStateListener() {
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
Intent intent = new Intent(context, MusicService.class);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
}
}
}, PhoneStateListener.LISTEN_CALL_STATE);
}
}
}
NotificationManager:
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification noti = new Notification(android.R.drawable.stat_notify_more, "notification", System.currentTimeMillis());
CharSequence title = "notification title";
CharSequence details = "notification details";
Intent notificationIntent = new Intent(context, MusicService.class);
PendingIntent pending = PendingIntent.getService(context, 0, notificationIntent, 0);
noti.setLatestEventInfo(context, title, details, pending);
noti.flags |= Notification.FLAG_AUTO_CANCEL;
// show the notification
nm.notify(id, noti);
// cancel it
nm.cancel(id);
闹钟AlarmManager:
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
PendingIntent pend = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 0);
AlarmManager am = (AlarmManager) context.getSystemService(Context.Alarm_Service);
// set the alarm
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), interval, pend);
// cancel the alarm
am.cancel(pend);
AlarmManager.set()和AlarmManager.setRepeating()的API说明中有一句:“If there is already an alarm scheduled for the same IntentSender, it will first be canceled. ”,如果用以上的代码设置有多个闹钟,则只有最后一个会起作用,解决的方法之一是:代码中第二句PendingIntent.getBroadcast()中的第二个参数,使得每个闹钟的这个参数值不同
另外,闹钟应用的话要在每次启动手机时在一个broadcastReceiver中设置闹钟
音量控制AudioManager:
AudioManager audioMgr = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
int flag = AudioManager.FLAG_SHOW_UI | AudioManager.FLAG_PLAY_SOUND;
audioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_RAISE, flag);
来源:oschina
链接:https://my.oschina.net/u/189801/blog/103318