1. 程式人生 > >第92章、廣播之三通過廣播啟動服務(從零開始學Android)

第92章、廣播之三通過廣播啟動服務(從零開始學Android)

  Service(服務)在Android中地位是至關重要的,我們可以通過Activity與Broadcast(廣播)啟動Service(服務),我們本章學習如何通過廣播Broadcast啟動服務Service。

  也許你會說,能用Activity啟動,幹嘛要用廣播呢?——且聽電話監聽、簡訊監聽再作分解!

一、設計介面

  1、佈局檔案

  開啟res/layout/activity_main.xml檔案。
  輸入以下程式碼:

<?xml version="1.0" encoding="utf-8" ?>

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent">

    <Button
        android:id="@+id/send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="通過Broadcast啟動Service" />

</LinearLayout>

二、程式檔案

  1、建立“src/com.genwoxue.broadcastservice/ServiceUtil.java”檔案。
  然後輸入以下程式碼:

package com.genwoxue.broadcastservice;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.util.Log;

public class ServiceUtil extends Service{
	
	private static final String TAG="AboutService"; 
	@Override
	public IBinder onBind(Intent intent){
		return null;
	}
	
	@Override
	public void onCreate(){
		Log.i(TAG,"服務:onCreate()");
	}
	
	//啟動
	@Override
	public int onStartCommand(Intent intent,int flags,int startId){
		Log.i(TAG, "服務啟動:onStart()=>Intent"+intent+",startID="+startId);
		return Service.START_CONTINUATION_MASK;
	}
	
	@Override
	public void onDestroy(){
		Log.i(TAG,"服務:onDestroy()");
	}

}

  2、建立“src/com.genwoxue.broadcastservice/BroadcastReceiverUtil.java”檔案。
  然後輸入以下程式碼:

package com.genwoxue.broadcastservice;

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

public class BroadcastReceiverUtil extends BroadcastReceiver{
	@Override
	public void onReceive(Context context,Intent intent){
		//廣播接收器(接收方)判斷Action為“com.genwoxue.action.ABOUTSERVICE”則啟動服務
		if("com.genwoxue.action.ABOUTSERVICE".equals(intent.getAction())){
			context.startService(new Intent(context,ServiceUtil.class));
		}
		
	}
}

  3、開啟“src/com.genwoxue.broadcastservice/MainActivity.java”檔案。
  然後輸入以下程式碼:

package com.genwoxue.broadcastservice;


import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;

public class MainActivity extends Activity {

	private BroadcastReceiverUtil util=null;
	private Button btnSend=null;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		btnSend=(Button)super.findViewById(R.id.send);
		btnSend.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View v){
				//傳送廣播:其Action為“com.genwoxue.action.ABOUTSERVICE”
				Intent intent=new Intent("com.genwoxue.action.ABOUTSERVICE");
				MainActivity.this.sendBroadcast(intent);
				
				
				//例項化廣播過濾器(只過濾其Action為"com.genwoxue.action.ABOUTSERVICE")
				IntentFilter filter=new IntentFilter("com.genwoxue.action.ABOUTSERVICE");
				//例項化廣播接收器(接收方)
				util=new BroadcastReceiverUtil();
				//註冊BroadcastReceiver:引數為接收器與過濾器
				MainActivity.this.registerReceiver(util, filter);
			}
		});
	}
	
	@Override
	protected void onStop(){
		//停止廣播
		super.unregisterReceiver(util);
		super.onStop();
		
		//停止服務
		Intent intent=new Intent(MainActivity.this,ServiceUtil.class);
		MainActivity.this.stopService(intent);
	}

}

三、配置檔案

  開啟“AndroidManifest.xml”檔案。

  然後輸入以下程式碼:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.genwoxue.broadcastservice"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="10"
        android:targetSdkVersion="15" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
      <activity
            android:name="com.genwoxue.broadcastservice.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name="com.genwoxue.broadcastservice.ServiceUtil" />
    </application>

</manifest>

注意:需要在AndroidManifest.xml檔案中新增<service...>:

  <service android:name="com.genwoxue.broadcastservice.ServiceUtil" />

四、執行結果

  Activity傳送廣播—>廣播接收方啟動Service服務

   

  

  

相關推薦

92廣播通過廣播啟動服務開始Android

  Service(服務)在Android中地位是至關重要的,我們可以通過Activity與Broadcast(廣播)啟動Service(服務),我們本章學習如何通過廣播Broadcast啟動服務Service。   也許你會說,能用Activity啟動,幹嘛要用廣播呢?—

3一個“Hello,world!”Android App開始Android

  幾乎所有中、英、法、德、美等版本的程式設計教材中,“hello,world!”程式總是作為開篇之作,可謂經典之中的經典!我本打算用“Hello,android!”替代它,但網上有240種語言都在寫這個“Hello,world!“,所以我想想之後,還是保留吧!   良好的

25OnTouchListener觸控事件開始Android

  在Android App應用中,OnTouch事件表示觸控事件,本章我們通過滑過影象獲取當前位置理解其具體用法。   知識點:OnTouch    一、設計介面   1、首先把c.jpg圖片複製到res/drawable-hdpi資料夾內。      2、開啟“re

52Bitmap影象處理開始Android

1、Drawable → Bitmap public static Bitmap drawableToBitmap(Drawable drawable) { Bitmap bitmap = Bitmap .createBitmap( drawable.getIntrinsicWidth(), drawabl

開始Android自定義View動畫系列——屬性動畫3

屬性動畫對補間動畫進行了很大幅度的改進,之前補間動畫可以做到的屬性動畫也能做到,補間動畫做不到的現在屬性動畫也可以做到了。因此,今天我們就來學習一下屬性動畫的高階用法,看看如何實現一些補間動畫所無法實現的功能。 ValueAnimator的高階用法 補間

開始Android AutoCompleteView 動態匹配輸入的內容像搜尋引擎上的匹配

1.AutoCompleteTextView屬性:   1>動態匹配輸入的內容   2>android:completionThreshold="n" -- 輸入n個字元開始匹配  在ac

開始產品五篇:個環境,開發測試和線上

本篇為【從零開始學產品】系列課第1章第4節 歡迎到公眾號選單欄,獲取產品經理課程更多資料     上節課我們說到了,Bug的生命週期,而只有在測試環境和線上環境發現的Bug,才會被稱之為Bug。 倒底什麼是測試環境,什麼是線上環境,

開始 Web CSS連結偽類背景行高盒子模型浮動

大家好,這裡是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關注。在這裡我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的專案。現在就讓我們一起進入 Web 前端學習的冒險之旅吧! 一、連結偽類 a:

開始 Web DOMinnerText與innerHTML自定義屬性

大家好,這裡是「 Daotin的夢囈 」從零開始學 Web 系列教程。此文首發於「 Daotin的夢囈 」公眾號,歡迎大家訂閱關注。在這裡我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的專案。現在就讓我們一起進入 Web 前端學習的冒險之旅吧! 一、相容程式碼 1

開始C++IO流類庫:檔案的讀寫二進位制檔案的讀寫檔案隨機讀寫

#include <cassert>#include <iostream>#include <fstream>#include <string>using namespace std;struct Test {     int a;     int b; };i

】 資源 4.4 Resource萬用字元路徑 ——跟我spring3

4.4.1  使用路徑萬用字元載入Resource        前面介紹的資源路徑都是非常簡單的一個路徑匹配一個資源,Spring還提供了一種更強大的Ant模式萬用字元匹配,從能一個路徑匹配一批資源。        Ant路徑萬用字元支援“?”、“*”、“**”,注意萬用字元匹配不包括目錄分隔符“/”:

開始Swift》學習筆記Day 57——Swift編碼規範凝視規範:文件凝視文檔凝視代碼凝視使用地標凝視

精品 -type mil 顯示 clas ber ansi tex text 原創文章。歡迎轉載。轉載請註明:關東升的博客 前面說到Swift凝視的語法有兩種:單行凝視(//)和多行凝視(/*...*/)。這裏來介紹一下他們的使用規範。 1、文件凝視文件凝視就在每個文

開始 Web BOMoffset,scroll,變速動畫函數

樣式 清理 java mar dde sof mov har width 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客園:

開始 Web JS 高級apply與call,bind,閉包和沙箱

master 操作 console 概念 釋放 分享圖片 成功 num 命名沖突 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔

開始 Web AjaxAjax 概述,快速上手

lan 技術分享 php 概述 由於 val asc logs 更新 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博客園:ht

開始 Web ES6ES6基礎語法一

arr 方法 foreach reac 公眾 存在 lock 數組名 回調函數 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔 博

開始 Web Vue.jsVue實例的生命周期

報錯 web 前端 cnblogs 前端 eth code vue 公眾 des 大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公眾號:Web前端之巔

一步一步實現web程式資訊管理系統----登陸業務邏輯實現驗證碼功能+引數獲取

本篇緊接著上一篇文章[一步一步實現web程式資訊管理系統之二----後臺框架實現跳轉登陸頁面] 驗證碼功能 一般驗證碼功能實現方式為,前端介面訪問一個url請求,後端服務程式碼生成一個圖片流返回至瀏覽器,瀏覽器通過img標籤來展示圖片資訊,其流程模式如下所示: 前端介面 前端介面需

【SpringMvc】開始SpringMvc實現使用者登入()

大家好,在前2篇中,我們實現了SpringMvc的配置和資料庫連線,這一篇我們來用html/ajax實現一個簡單的登入功能。 【SpringMvc】從零開始學SpringMvc之初始化(一) 【SpringMvc】從零開始學SpringMvc之資料庫(二) 準

設計模式:單例模式餓漢式與懶漢式

//保證類在記憶體中只有一個物件 package com.xjh.demo.designpattern.pattern3; public class Student { private Student(){ } //懶漢式 priva