1. 程式人生 > >47.android服務service-程式碼註冊廣播接收者

47.android服務service-程式碼註冊廣播接收者

廣播可以在程式碼中註冊

使用程式碼註冊廣播接收者

1.使用清單檔案配置:廣播一旦發出,系統會去所有的清單檔案中徐照,哪一個廣播接收者的action和廣播的action是匹配的,如果找到了,就把廣播接收者的程序啟動啟動起來,

2.使用程式碼註冊:需要使用廣播接收者時,執行註冊的程式碼,不需要的時候,執行解除註冊的程式碼。

特殊的廣播接收者

安卓中有一些廣播接收者,必須使用程式碼註冊,清單檔案註冊是無效的1.螢幕鎖屏和解鎖,電量的改變。

服務只能在清單檔案中配置

清單檔案

<service android:name="com.ldw.registBroadcast.registerService"></service>

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" 
    android:orientation="vertical"
    >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="啟動服務" 
        android:onClick="start"
        />
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="停止服務" 
        android:onClick="stop"
        />
</LinearLayout>

MainActivity.java

package com.ldw.registBroadcast;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends Activity {

	private Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intent = new Intent(this, com.ldw.registBroadcast.registerService.class);
    }

    public void start(View v){
    	startService(intent);
    }
    
    public void stop(View v){
    	stopService(intent);
    }
    
}

registerService.java

package com.ldw.registBroadcast;

import android.app.Service;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;

public class registerService extends Service {

	private screenReceiver receiver;
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return null;
	}
	
	@Override
	public void onCreate(){
		super.onCreate();
		//註冊廣播接收者
		//1.建立廣播接收著物件
		receiver = new screenReceiver();
		//2.建立一個intent-filter物件
		IntentFilter filter = new IntentFilter();
		filter.addAction(Intent.ACTION_SCREEN_ON);
		filter.addAction(Intent.ACTION_SCREEN_OFF);
		//3.註冊廣播接收者
		registerReceiver(receiver, filter);
	}

	@Override
	public void onDestroy(){
		super.onDestroy();
		//解除註冊廣播接收者
		unregisterReceiver(receiver);
	}
}

screenReceiver.java

package com.ldw.registBroadcast;

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

public class screenReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		// TODO Auto-generated method stub
		String action = intent.getAction();
		if(Intent.ACTION_SCREEN_OFF.equals(action)){
			System.out.println("螢幕關閉off");
		}
		else if(Intent.ACTION_SCREEN_ON.equals(action)){
			System.out.println("螢幕開啟on");
		}

	}

}