Android - 利用 Broadcast 啟動 Service 通知欄通知

一、環境

  1. 安卓系統:4.2
  2. 操作系統:Win 8.1
  3. 工具:Android Studio

二、利用廣播開啟后臺服務

  1. 定義一個廣播接收器類(MyBroadcastReceive)繼承自 BroadcastReceive,重寫里面的 onReceive 方法,即可在接收到廣播后做出相應操作。
public class MyBroadcastReceiver extends BroadcastReceiver {    
        private final String TAG = "MyBroadcastReceiver";   
 
        @Override    
        public void onReceive(Context context, Intent intent) {        
            //后邊的XXX.class就是要啟動的服務        
            Intent service = new Intent(context,NofyService.class);        
            context.startService(service);        
            Log.v(TAG, "onReceive");    
        }
}
  1. 定義一個服務(MyService)繼承自 Service ,并重寫 onCreate、onStartCommand、onDestroy 方法即可。onCreate 方法在服務被創建時調用,onStartCommand 在服務開始后調用,如果 Activity 多次調用 Service,則只會在第一次調用 onCreate,其他都是調用 onStartCommand。
public class NofyService extends Service {    
        private final String TAG = "NofyService";    
        private Intent in;    
        private int flags;    
        private int startId;    

        @Nullable    
        @Override    
        public IBinder onBind(Intent intent) {        return null;    }    
    
        @Override    
        public void onCreate() {        
            Toast.makeText(getApplication(), "service", Toast.LENGTH_SHORT).show();        
            Log.v(TAG, "onCreate");    
        }    

        @Override    
        public int onStartCommand(Intent intent, int flags, int startId) {        
            this.in = intent;        
            this.flags = flags;        
            this.startId = startId; 
            new Thread(checkTime).start();        
            Toast.makeText(getApplication(), "service", 
            Toast.LENGTH_SHORT).show();        
            Log.v(TAG, "onStart");        
            return START_STICKY;    
        }    

        //Service 的功能,創建通知欄通知 
        Runnable checkTime = new Runnable() {        
            @Override        
            public void run() {            
                Calendar ca = Calendar.getInstance();
                //利用 Notification 類設置通知的屬性
                Notification notification = new Notification.Builder(getApplicationContext())                    
                    .setContentTitle("事件提醒")                    
                    .setContentText("有事件")
                    //不設置小圖標通知欄顯示通知(不確定)
                    .setSmallIcon(R.mipmap.ic_launcher)                    
                    .build();
                notification.flags = Notification.FLAG_INSISTENT;
                //利用 NotificationManager 類發出通知欄通知
                NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);            
                nm.notify(1, notification);        
            }    
        };    

        @Override    
        public void onDestroy() {        
            this.onStartCommand(in, flags, startId);    
        }
}
  1. 在 AndroidManifest.xml 注冊 MyBroadcastReceive。
<!-- 廣播接收器 -->
<receiver android:name=".broadcastReceiver.MyBroadcastReceiver">    
        <intent-filter >        
            <action android:name="com.cj_finger.broadcast" />    
        </intent-filter>
</receiver>
  1. 在 AndroidManifest.xml 注冊 MyService。
<!-- 服務 -->
<service    android:name=".service.NofyService"    android:process=":NofyService" >    
        <intent-filter>        
            <action android:name="com.cj_finger.service.NofyService" />    
        </intent-filter>
</service>
  1. *添加開機啟動權限(開機啟動,有的手機廠家會屏蔽開機廣播)。
<!-- 開機自啟權限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
  1. *還要設置 MyBroadcastReceive 的注冊信息。
<!-- 廣播接收器 -->
<receiver android:name=".broadcastReceiver.BootBroadcastReceiver">    
        <intent-filter >        
            <action android:name="android.intent.action.BOOT_COMPLETED" />        
            <category android:name="android.intent.category.LAUNCHER" />    
        </intent-filter>
</receiver>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 本人初學Android,最近做了一個實現安卓簡單音樂播放功能的播放器,收獲不少,于是便記錄下來自己的思路與知識總結...
    落日柳風閱讀 19,211評論 2 41
  • 2017年5月17日 Kylin_Wu 標注(★☆)為考綱明確給出考點(必考) 常見手機系統(★☆) And...
    Azur_wxj閱讀 1,837評論 0 10
  • 前言:本文所寫的是博主的個人見解,如有錯誤或者不恰當之處,歡迎私信博主,加以改正!原文鏈接,demo鏈接 Serv...
    PassersHowe閱讀 1,444評論 0 5
  • 本篇文章是繼續上篇android圖片壓縮上傳系列-基礎篇文章的續篇。主要目的是:通過Service來執行圖片壓縮任...
    laogui閱讀 4,465評論 5 62
  • 喬默從方正手里接過半截香煙狠狠地吸了兩口后,將手里的素描板往方正的手里一塞說道 :“我就這功夫了,至于能不能給你們...
    長白居士閱讀 256評論 0 0