Android開發(fā):系統(tǒng)自動(dòng)實(shí)現(xiàn)開機(jī)啟動(dòng)
我們?cè)谇懊嬉呀?jīng)講過了Android開發(fā):自由選擇TextView的文字和如何實(shí)現(xiàn)TCP和UDP傳輸。如果您在開發(fā)一個(gè)需要實(shí)時(shí)更新數(shù)據(jù)的應(yīng)用程序,當(dāng)有新的數(shù)據(jù)的時(shí)候提醒用戶查看新的數(shù)據(jù),那么您需要在后臺(tái)開起一個(gè)Service,然后實(shí)時(shí)的去網(wǎng)絡(luò)上獲取數(shù)據(jù),但是如果用戶關(guān)機(jī)重啟,您的Service可能就消失了!那么怎么樣保證開機(jī)后你的Service還活躍的在用戶的手機(jī)里偷偷的從網(wǎng)絡(luò)上獲取數(shù)據(jù)呢?
很簡(jiǎn)單,我們只要實(shí)現(xiàn)開機(jī)自啟動(dòng)即可,Android實(shí)現(xiàn)開機(jī)自啟動(dòng)可能是移動(dòng)操作系統(tǒng)中最簡(jiǎn)單的了,我們只需要監(jiān)聽一個(gè)開機(jī)啟動(dòng)的Broadcast(廣播)即可。首先寫一個(gè)Receiver(即廣播監(jiān)聽器),繼承BroadcastReceiver,如下所示:
- public class BootReceiver extends BroadcastReceiver {
- private PendingIntent mAlarmSender;
- @Override
- public void onReceive(Context context, Intent intent) {
- // 在這里干你想干的事(啟動(dòng)一個(gè)Service,Activity等),本例是啟動(dòng)一個(gè)定時(shí)調(diào)度程序,每30分鐘啟動(dòng)一個(gè)Service去更新數(shù)據(jù)
- mAlarmSender = PendingIntent.getService(context, 0, new Intent(context,
- RefreshDataService.class), 0);
- long firstTime = SystemClock.elapsedRealtime();
- AlarmManager am = (AlarmManager) context
- .getSystemService(Activity.ALARM_SERVICE);
- am.cancel(mAlarmSender);
- am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,
- 30 * 60 * 1000, mAlarmSender);
- }
- }
接下來,我們只需要在應(yīng)用程序配置文件AndroidManifest.xml中注冊(cè)這個(gè)Receiver來監(jiān)聽系統(tǒng)啟動(dòng)事件即可,如下所示:
- <receiver android:name=".service.BootReceiver">
- <intent-filter>
- <!-- 系統(tǒng)啟動(dòng)完成后會(huì)調(diào)用-->
- <action android:name="android.intent.action.BOOT_COMPLETED">
- </action>
- </intent-filter>
- </receiver>
就這樣,我們就實(shí)現(xiàn)了系統(tǒng)自啟動(dòng),怎么樣?是不是很簡(jiǎn)單?
【編輯推薦】