Andoird 監聽開機廣播和關機廣播


需求:有時候,我們需要自己的程序在開機后自動運行;在關機時,記錄一些信息到文件中.

一、開機廣播監聽
Android系統啟動完成后會自動發出啟動完成廣播(android.intent.action.BOOT_COMPLETED),
所有注冊了接收啟動完成廣播的接收器(BroadcastReceiver)都會收到此廣播.

①編寫一個繼承BroadcastReceiver的類,接受系統啟動完成廣播.

package com.example.systemtest;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

/**
 * 系統啟動完成廣播接收器
 * #<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
 * @author Lone_Wolf
 */
public class BootCompletedReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
            //example:啟動程序
            Intent start = new Intent(context, MainActivity.class);
            start.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);//
            context.startActivity(start);
        }
    }
}

②在AndroidManifest.xml文件里注冊廣播接收器.

<receiver android:name="com.example.systemtest.BootCompletedReceiver" >  
    <intent-filter>   
        <!-- 開機廣播 -->  
        <action android:name="android.intent.action.BOOT_COMPLETED" />  
    </intent-filter>   
</receiver>

③添加相應權限.

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

 

二、關機廣播監聽
與開機廣播對應,Android系統在即將關閉時發出系統關閉廣播(android.intent.action.ACTION_SHUTDOWN).

①編寫一個繼承BroadcastReceiver的類,接受系統關閉廣播.

package com.example.systemtest;

import java.io.File;
import java.io.FileOutputStream;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

/**
 * 系統關閉廣播接收器
 * @author Lone_Wolf
 */
public class ShutdownReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals(Intent.ACTION_SHUTDOWN)) {
            //example:寫入文件
            FileOutputStream fos;
            try {
                fos = new FileOutputStream(
                          android.os.Environment.getExternalStorageDirectory()
                          + File.separator + "SysLog.txt", true);
                fos.write("系統退出".getBytes("utf-8"));
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }           
        }
    }
}

②在AndroidManifest.xml文件里注冊廣播接收器.

<receiver android:name="com.example.systemtest.ShutdownReceiver" >  
    <intent-filter>   
        <!-- 關機廣播 -->  
        <action android:name="android.intent.action.ACTION_SHUTDOWN" />  
    </intent-filter>   
</receiver>

 

注: onReceive中代碼的執行時間不要超過5s,否則android會彈出超時dialog.
     如果需要做耗時處理,可以在onReceive()里開始一個Service,讓Service去做耗時處理.
     最好不要用子線程,因為BroadcastReceiver的生命周期很短,子線程可能還沒有結束BroadcastReceiver就先結束了.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM