public class MainActivity extends Activity {
private TextView tv = null;
private Button setTime,cancelTime;
private Calendar c = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String alarm = getIntent().getStringExtra(“alarm”);
if(alarm != null&&alarm.equals(“alarm”)){
stopService(new Intent(“com.yqy.yqy_alarm.MUSIC”));
}
tv = (TextView)findViewById(R.id.tv);
setTime = (Button)findViewById(R.id.setAlarm);
cancelTime = (Button)findViewById(R.id.cancelAlarm);
//得到日歷實(shí)例,主要是為了下面的獲取時(shí)間
c = Calendar.getInstance();
setTime.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View arg0) {
c.setTimeInMillis(System.currentTimeMillis());
int hour = c.get(Calendar.HOUR_OF_DAY);
int minute = c.get(Calendar.MINUTE);
new TimePickerDialog(MainActivity.this, minute, new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
//是設(shè)置日歷的時(shí)間,主要是讓日歷的年月日和當(dāng)前同步
c.setTimeInMillis(System.currentTimeMillis());
//設(shè)置小時(shí)分鐘,秒和毫秒都設(shè)置為0
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
c.set(Calendar.MINUTE, minute);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);
int requestCode = 0;//鬧鐘的唯一標(biāo)示
Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
intent.putExtra(“requestCode”, requestCode);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, requestCode, intent, 0);
//得到AlarmManager實(shí)例
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
//根據(jù)當(dāng)前時(shí)間預(yù)設(shè)一個(gè)警報(bào)
am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi);
/**
-
第一個(gè)參數(shù)是警報(bào)類型;第二個(gè)參數(shù)是第一次執(zhí)行的延遲時(shí)間,可以延遲,也可以馬上執(zhí)行;第三個(gè)參數(shù)是重復(fù)周期為一天
-
這句話的意思是設(shè)置鬧鈴重復(fù)周期,也就是執(zhí)行警報(bào)的間隔時(shí)間
*/
// am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+(60*1000),
// (246060*1000), pi);
// am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),
// 1000605, pi);
String msg = hourOfDay+“:”+minute;
tv.setText(“當(dāng)前設(shè)置的鬧鐘時(shí)間:”+msg);
}
}, hour, minute, true).show();
//上面的TimePickerDialog中的5個(gè)參數(shù)參考:http://blog.csdn.net/yang_hui1986527/article/details/6839342
}
});
cancelTime.setOnClickListener(new Button.OnClickListener()
{
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0,
intent, 0);
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
//取消警報(bào)
am.cancel(pi);
tv.setText(“鬧鐘取消”);
//取消鬧鐘的同時(shí)取消音樂
stopService(new Intent(“com.yqy.yqy_alarm.MUSIC”));
}
});
}
}
AlarmReceiver
package com.yqy.yqy_alarm;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class AlarmReceiver extends BroadcastReceiver {
Intent intent;
int requestCode = -1;
@Override
public void onReceive(Context context, Intent arg1) {
requestCode = arg1.getIntExtra(“requestCode”, 0);
NotificationManager nm = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Notification n = new Notification(R.drawable.ic_launcher, “Hello,there!”, System.currentTimeMillis());
n.flags = Notification.FLAG_AUTO_CANCEL;
intent = new Intent(context, MainActivity.class);
intent.putExtra(“alarm”, “alarm”);
intent.setComponent(new ComponentName(“com.yqy.yqy_alarm”, “com.yqy.yqy_alarm.MainActivity”));
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);//關(guān)鍵的一步,設(shè)置啟動(dòng)模式
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
n.setLatestEventInfo(
context,
“Hello,there!”,
“Hello,there,I’m john.”,
contentIntent);
nm.notify(R.string.app_name, n);
Toast.makeText(context, “鬧鐘時(shí)間到”, Toast.LENGTH_SHORT).show();
intent = new Intent(“com.yqy.yqy_alarm.MUSIC”);
//啟動(dòng)Service播放音樂
context.stopService(new Intent(“com.yqy.yqy_alarm.MUSIC”));
context.startService(intent);
}
}
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進(jìn)入阿里一直到現(xiàn)在。
深知大多數(shù)初中級(jí)Android工程師,想要提升技能,往往是自己摸索成長(zhǎng)或者是報(bào)班學(xué)習(xí),但對(duì)于培訓(xùn)機(jī)構(gòu)動(dòng)則近萬的學(xué)費(fèi),著實(shí)壓力不小。自己不成體系的自學(xué)效果低效又漫長(zhǎng),而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Android移動(dòng)開發(fā)全套學(xué)習(xí)資料》,初衷也很簡(jiǎn)單,就是希望能夠幫助到想自學(xué)提升又不知道該從何學(xué)起的朋友,同時(shí)減輕大家的負(fù)擔(dān)。
既有適合小白學(xué)習(xí)的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗(yàn)的小伙伴深入學(xué)習(xí)提升的進(jìn)階課程,基本涵蓋了95%以上Android開發(fā)知識(shí)點(diǎn),真正體系化!
由于文件比較大,這里只是將部分目錄截圖出來,每個(gè)節(jié)點(diǎn)里面都包含大廠面經(jīng)、學(xué)習(xí)筆記、源碼講義、實(shí)戰(zhàn)項(xiàng)目、講解視頻,并且會(huì)持續(xù)更新!
如果你覺得這些內(nèi)容對(duì)你有幫助,可以掃碼獲?。。。▊渥ⅲ篈ndroid)

最后
在這里我和身邊一些朋友特意整理了一份快速進(jìn)階為Android高級(jí)工程師的系統(tǒng)且全面的學(xué)習(xí)資料。涵蓋了Android初級(jí)——Android高級(jí)架構(gòu)師進(jìn)階必備的一些學(xué)習(xí)技能。
附上:我們之前因?yàn)榍镎惺占亩滓欢€互聯(lián)網(wǎng)公司Android面試真題(含BAT、小米、華為、美團(tuán)、滴滴)和我自己整理Android復(fù)習(xí)筆記(包含Android基礎(chǔ)知識(shí)點(diǎn)、Android擴(kuò)展知識(shí)點(diǎn)、Android源碼解析、設(shè)計(jì)模式匯總、Gradle知識(shí)點(diǎn)、常見算法題匯總。)
《Android學(xué)習(xí)筆記總結(jié)+移動(dòng)架構(gòu)視頻+大廠面試真題+項(xiàng)目實(shí)戰(zhàn)源碼》,點(diǎn)擊傳送門即可獲?。?/strong>
roid高級(jí)架構(gòu)師進(jìn)階必備的一些學(xué)習(xí)技能。**文章來源:http://www.zghlxwxcb.cn/news/detail-846719.html
附上:我們之前因?yàn)榍镎惺占亩滓欢€互聯(lián)網(wǎng)公司Android面試真題(含BAT、小米、華為、美團(tuán)、滴滴)和我自己整理Android復(fù)習(xí)筆記(包含Android基礎(chǔ)知識(shí)點(diǎn)、Android擴(kuò)展知識(shí)點(diǎn)、Android源碼解析、設(shè)計(jì)模式匯總、Gradle知識(shí)點(diǎn)、常見算法題匯總。)
[外鏈圖片轉(zhuǎn)存中…(img-An2ESWEv-1712137019131)]文章來源地址http://www.zghlxwxcb.cn/news/detail-846719.html
《Android學(xué)習(xí)筆記總結(jié)+移動(dòng)架構(gòu)視頻+大廠面試真題+項(xiàng)目實(shí)戰(zhàn)源碼》,點(diǎn)擊傳送門即可獲?。?/strong>
到了這里,關(guān)于android Alarm鬧鐘發(fā)送廣播播放音樂的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!