首页 > 代码库 > android 学习随笔十八(广播与服务 )
android 学习随笔十八(广播与服务 )
1、广播接收者注册
- 清单文件注册(Android四大组件都要在清单文件中注册)
一旦应用部署,广播接收者就生效了,直到用户手动停止应用或者应用被删除
- 广播接收者可以使用代码注册
需要广播接收者运行时,使用代码注册,不需要时,可以使用代码解除注册
特殊广播接收者,必须代码注册。电量改变、屏幕开关,必须使用代码注册
2、注册广播接收者
//创建广播接收者对象
receiver = new ScreenOnOffReceiver();
//通过IntentFilter对象指定广播接收者接收什么类型的广播
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
//注册广播接收者
registerReceiver(receiver, filter);
* 解除注册广播接收者
unregisterReceiver(receiver);
* 解除注册之后,广播接收者将失去作用
1 package com.itheima.register; 2 3 import android.content.BroadcastReceiver; 4 import android.content.Context; 5 import android.content.Intent; 6 7 public class ScreenOnOFFReceiver extends BroadcastReceiver { 8 9 @Override10 public void onReceive(Context context, Intent intent) {11 12 String action = intent.getAction();13 if(Intent.ACTION_SCREEN_ON.equals(action)){14 System.out.println("屏幕开啦啦");15 }16 else if(Intent.ACTION_SCREEN_OFF.equals(action)){17 System.out.println("屏幕关哇哇");18 }19 20 }21 22 }
1 package com.itheima.register; 2 3 import android.app.Service; 4 import android.content.Intent; 5 import android.content.IntentFilter; 6 import android.os.IBinder; 7 8 public class RegisterService extends Service { 9 10 private ScreenOnOFFReceiver receiver;11 12 @Override13 public IBinder onBind(Intent intent) {14 // TODO Auto-generated method stub15 return null;16 }17 18 @Override19 public void onCreate() {20 super.onCreate();21 //1.创建广播接收者对象22 receiver = new ScreenOnOFFReceiver();23 //2.创建意图过滤器对象24 IntentFilter filter = new IntentFilter();25 //指定接收什么广播26 filter.addAction(Intent.ACTION_SCREEN_OFF);27 filter.addAction(Intent.ACTION_SCREEN_ON);28 //3.注册广播接收者29 registerReceiver(receiver, filter);30 31 }32 33 @Override34 public void onDestroy() {35 super.onDestroy();36 //反注册广播接收者37 unregisterReceiver(receiver);38 }39 40 }
1 package com.itheima.register; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.content.Intent; 6 import android.view.Menu; 7 import android.view.View; 8 9 public class MainActivity extends Activity {10 11 @Override12 protected void onCreate(Bundle savedInstanceState) {13 super.onCreate(savedInstanceState);14 setContentView(R.layout.activity_main);15 }16 17 18 public void start(View v){19 Intent intent = new Intent(this, RegisterService.class);20 startService(intent);21 }22 public void stop(View v){23 Intent intent = new Intent(this, RegisterService.class);24 stopService(intent);25 }26 27 }
服务注册广播
3、服务的分类
- 本地服务:服务和启动它的组件在同一个进程
- 远程服务:服务和启动它的组件不在同一个进程
- 远程服务只能隐式启动,类似隐式启动Activity,在清单文件中配置Service标签时,必须配置intent-filter子节点,并指定action子节点
远程服务
1 package com.itheima.remoteservice; 2 3 import com.itheima.remoteservice.PublicBusiness.Stub; 4 5 import android.app.Service; 6 import android.content.Intent; 7 import android.os.Binder; 8 import android.os.IBinder; 9 10 public class RemoteService extends Service{11 12 @Override13 public IBinder onBind(Intent intent) {14 System.out.println("绑定");15 return new FengMiShu();16 }17 18 class FengMiShu extends Stub{19 20 @Override21 public void qianXian() {22 // TODO Auto-generated method stub23 remoteBanZheng();24 }25 26 }27 28 @Override29 public boolean onUnbind(Intent intent) {30 System.out.println("解绑");31 return super.onUnbind(intent);32 }33 34 @Override35 public void onCreate() {36 System.out.println("创建");37 super.onCreate();38 }39 40 @Override41 public int onStartCommand(Intent intent, int flags, int startId) {42 System.out.println("开始");43 return super.onStartCommand(intent, flags, startId);44 }45 46 @Override47 public void onDestroy() {48 System.out.println("摧毁");49 super.onDestroy();50 }51 52 public void remoteBanZheng(){53 System.out.println("苗领导在国外远程办证");54 }55 56 }
1 package com.itheima.remoteservice; 2 3 import android.os.Bundle; 4 import android.app.Activity; 5 import android.view.Menu; 6 7 public class MainActivity extends Activity { 8 9 @Override10 protected void onCreate(Bundle savedInstanceState) {11 super.onCreate(savedInstanceState);12 setContentView(R.layout.activity_main);13 }14 15 16 @Override17 public boolean onCreateOptionsMenu(Menu menu) {18 // Inflate the menu; this adds items to the action bar if it is present.19 getMenuInflater().inflate(R.menu.main, menu);20 return true;21 }22 23 }
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.itheima.remoteservice" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="8" 9 android:targetSdkVersion="17" />10 11 <application12 android:allowBackup="true"13 android:icon="@drawable/ic_launcher"14 android:label="@string/app_name"15 android:theme="@style/AppTheme" >16 <activity17 android:name="com.itheima.remoteservice.MainActivity"18 android:label="@string/app_name" >19 <intent-filter>20 <action android:name="android.intent.action.MAIN" />21 22 <category android:name="android.intent.category.LAUNCHER" />23 </intent-filter>24 </activity>25 <service android:name="com.itheima.remoteservice.RemoteService">26 <intent-filter >27 <action android:name="com.itheima.remote"/>28 </intent-filter>29 </service>30 </application>31 32 </manifest>
调用远程服务操作
package com.itheima.runremoteservice;public interface PublicBusiness { void qianXian();}
1 package com.itheima.runremoteservice; 2 3 import android.os.Bundle; 4 import android.os.IBinder; 5 import android.app.Activity; 6 import android.content.ComponentName; 7 import android.content.Intent; 8 import android.content.ServiceConnection; 9 import android.view.Menu;10 import android.view.View;11 12 public class MainActivity extends Activity {13 14 public PublicBusiness pb;15 private MyConn conn;16 17 @Override18 protected void onCreate(Bundle savedInstanceState) {19 super.onCreate(savedInstanceState);20 setContentView(R.layout.activity_main);21 22 conn = new MyConn();23 }24 25 26 public void start(View v){27 Intent intent = new Intent();28 intent.setAction("com.itheima.remote");29 startService(intent);30 }31 public void stop(View v){32 Intent intent = new Intent();33 intent.setAction("com.itheima.remote");34 stopService(intent);35 }36 public void bind(View v){37 Intent intent = new Intent();38 intent.setAction("com.itheima.remote");39 bindService(intent, conn, BIND_AUTO_CREATE);40 }41 42 public void unbind(View v){43 unbindService(conn);44 }45 class MyConn implements ServiceConnection{46 47 @Override48 public void onServiceConnected(ComponentName name, IBinder service) {49 pb = (PublicBusiness) service;50 51 }52 53 @Override54 public void onServiceDisconnected(ComponentName name) {55 // TODO Auto-generated method stub56 57 }58 59 }60 61 public void banZheng(View v){62 pb.qianXian();63 }64 }
4、服务的分类
才
android 学习随笔十八(广播与服务 )
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。