47.android服務service-程式碼註冊廣播接收者
阿新 • • 發佈:2019-01-10
廣播可以在程式碼中註冊
使用程式碼註冊廣播接收者
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");
}
}
}