一、環境
安卓系統:4.2
操作系統:Win 8.1
工具:Android Studio
二、利用廣播開啟后臺服務
定義一個廣播接收器類(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");
}
}
定義一個服務(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);
}
}
在 AndroidManifest.xml 注冊 MyBroadcastReceive。
<!-- 廣播接收器 -->
<receiver android:name=".broadcastReceiver.MyBroadcastReceiver">
<intent-filter >
<action android:name="com.cj_finger.broadcast" />
</intent-filter>
</receiver>
在 AndroidManifest.xml 注冊 MyService。
<!-- 服務 -->
<service android:name=".service.NofyService" android:process=":NofyService" >
<intent-filter>
<action android:name="com.cj_finger.service.NofyService" />
</intent-filter>
</service>
*添加開機啟動權限(開機啟動,有的手機廠家會屏蔽開機廣播)。
<!-- 開機自啟權限 -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
*還要設置 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>
最后編輯于 :2017.12.05 05:04:23
?著作權歸作者所有,轉載或內容合作請聯系作者 平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。