鱼C论坛

 找回密码
 立即注册
查看: 3001|回复: 5

[原创]android四大组件之广播与服务

[复制链接]
发表于 2014-11-12 23:04:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
*************************************广播接受者:BroadcastReceiver********************************自定义广播的接收:

定义广播接收的类:
  1. package com.example.broadcast_test;

  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.util.Log;

  6. public class MyBroadcastReceiver extends BroadcastReceiver {

  7.         @Override
  8.         public void onReceive(Context arg0, Intent arg1) {
  9.                 // TODO Auto-generated method stub
  10.                 Log.i("MyBroadcastReceiver", "MyBroadcastReceiver接收到了广播");
  11.         }

  12. }
复制代码
发送广播:
  1. Intent intent = new Intent("xiaobaima");
  2.                 intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
  3.                 intent.putExtra("message", "下课啦");
  4.                
  5.                 sendBroadcast(intent);
复制代码
xml中权限以及接受者的配置:

1.所需权限:
  1. <permission android:name="aaa.bbb.ccc"></permission>    <!-自定义权限->
  2. <uses-permission android:name="aaa.bbb.ccc"/>                 <!-声明权限->
复制代码
2.接受者的配置:


  1. <receiver android:name="com.example.broadcast_test.MyBroadcastReceiver">
  2.             <intent-filter android:priority="100">
  3.                 <action android:name="xiaobaima"></action>
  4.             </intent-filter>
  5.         </receiver>
复制代码

系统广播的接收实现短信的拦截与电话的窃听:

xml中权限与接受者的配置:
1.权限的配置:
  1. <uses-permission android:name="android.permission.RECEIVE_SMS"/>
  2. <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
复制代码
2.接受者的配置:

  1. <receiver android:name="com.example.broadcast_recevier_test.SmsReceiver"
  2.          
  3.           >
  4.           <intent-filter android:priority="1000">   <!--拦截短信的-->
  5.               <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
  6.           </intent-filter>
  7.       </receiver>
  8.       <receiver android:name="com.example.broadcast_recevier_test.PhoneReceiver">
  9.           <intent-filter android:priority="1000">   <!--窃听电话的-->
  10.               <action android:name="android.intent.action.NEW_OUTGOING_CALL"/>
  11.           </intent-filter>
  12.       </receiver>
复制代码
定义短信与电话的广播类进行拦截操作:

1.短信的拦截:
  1. public class SmsReceiver extends BroadcastReceiver {

  2.         @Override
  3.         public void onReceive(Context arg0, Intent intent) {
  4.                 // TODO Auto-generated method stub   
  5.                 Log.i("SmsReceiver", "我接收到了系统发来短信!");
  6.                 Object[] obj = (Object[]) intent.getExtras().get("pdus");
  7.                 for(Object o : obj)
  8.                 {
  9.                         @SuppressWarnings("deprecation")
  10.                         SmsMessage message = SmsMessage.createFromPdu((byte[]) o);
  11.                         @SuppressWarnings("deprecation")
  12.                         String address = message.getOriginatingAddress();   //电话号码
  13.                         Log.i("SmsReceiver", "号码:" + address);
  14.                         @SuppressWarnings("deprecation")
  15.                         String body = message.getMessageBody();   //短信的内容
  16.                        
  17.                         Log.i("SmsReceiver", "内容:" + body);
  18.                        
  19.                         if(body.contains("xiaobaima"))
  20.                         {
  21.                                 abortBroadcast();
  22.                         }
  23.                 }
  24.         }
  25. }
复制代码
2.电话的拦截:

  1. public class PhoneReceiver extends BroadcastReceiver {

  2.         @Override
  3.         public void onReceive(Context arg0, Intent arg1) {
  4.                 // TODO Auto-generated method stub
  5.                 String phone = getResultData();
  6.                
  7.                 if("1383039".equals(phone))   //如果对方打的是这个电话号码的话,就将它置为空,这样就打不出去电话了
  8.                 {
  9.                          Log.i("PhoneReceiver", phone);
  10.                          setResultData(null);
  11.                 }
  12.         }

  13. }
复制代码

*************************************服务:Service********************************
音乐播放的实现:

xml中所要的权限以及配置:
1.权限:
  1. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  2. <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  3. <uses-permission android:name="android.permission.RECORD_AUDIO"/>
复制代码
2.服务的配置:

  1. <service android:name="com.example.service_test.PhoneService"></service>    <!--电话窃听的配置-->
  2. <service android:name="com.example.service_test.MusicService"></service>    <!--播放音乐的配置-->
复制代码


3.继承Service类:
  1. public class MusicService extends Service {

  2.         private MediaPlayer mediaPlayer;
  3.         private int position = 0;
  4.        
  5.         @Override
  6.         public void onCreate() {
  7.                 // TODO Auto-generated method stub
  8.                 super.onCreate();
  9.                 Log.i("MusicService","oncreate");
  10.                 mediaPlayer = MediaPlayer.create(this, R.raw.msc);
  11.                 mediaPlayer.seekTo(position);
  12.                 mediaPlayer.start();
  13.                
  14.                 TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
  15.                 manager.listen(new MyPhoneStateListener() , PhoneStateListener.LISTEN_CALL_STATE);
  16.         }

  17.         private class MyPhoneStateListener extends PhoneStateListener
  18.         {
  19.                 @Override
  20.                 public void onCallStateChanged(int state, String incomingNumber) {
  21.                         // TODO Auto-generated method stub
  22.                         switch(state)
  23.                         {
  24.                         case TelephonyManager.CALL_STATE_IDLE:
  25.                                 mediaPlayer.seekTo(position);
  26.                                 mediaPlayer.start();
  27.                                 break;
  28.                         case TelephonyManager.CALL_STATE_RINGING:
  29.                                 if(mediaPlayer.isPlaying())
  30.                                 {
  31.                                         mediaPlayer.pause();
  32.                                 }
  33.                                 break;
  34.                                
  35.                         case TelephonyManager.CALL_STATE_OFFHOOK:
  36.                                 break;
  37.                         }
  38.                 }
  39.         }
  40.         @Override
  41.         public void onDestroy() {
  42.                 // TODO Auto-generated method stub
  43.                 super.onDestroy();
  44.                 if(mediaPlayer != null)
  45.                 {
  46.                         mediaPlayer.stop();
  47.                         mediaPlayer = null;
  48.                 }
  49.         }

  50.         @Override
  51.         public int onStartCommand(Intent intent, int flags, int startId) {
  52.                 // TODO Auto-generated method stub
  53.                 return super.onStartCommand(intent, flags, startId);
  54.         }

  55.         @Override
  56.         public IBinder onBind(Intent arg0) {
  57.                 // TODO Auto-generated method stub
  58.                 return null;
  59.         }

  60. }
复制代码

值得注意的是:

服务的生命周期是开始的时候会执行oncreate方法然后就是onStartCommand方法,如果再一次执行的话,就不再执行oncreate方法了,直接执行的是:onStartCommand方法;


服务的启动:
首先服务启动实在activity里面启动的它的启动代码是:
  1. Intent intent = new Intent(this, MusicService.class);
  2.                 startService(intent);
复制代码
电话窃听的实现:

  1. public class PhoneService extends Service {

  2. private MediaRecorder mediaRecorder;

  3.         @Override
  4.         public void onCreate() {
  5.                 // TODO Auto-generated method stub
  6.                 Log.i("PhoneService", "onCreate()");
  7.                 TelephonyManager manager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
  8.                 manager.listen(new MyPhoneStateListener(), PhoneStateListener.LISTEN_CALL_STATE);
  9.         }
  10.        
  11.         private class MyPhoneStateListener extends PhoneStateListener
  12.         {
  13.                 @Override
  14.                 public void onCallStateChanged(int state, String incomingNumber) {
  15.                         // TODO Auto-generated method stub
  16.                         try
  17.                         {
  18.                                 switch(state)
  19.                                 {
  20.                                 case TelephonyManager.CALL_STATE_IDLE:   //电话的空闲状态
  21.                                         if(mediaRecorder != null)
  22.                                         {
  23.                                                 mediaRecorder.stop();
  24.                                                 mediaRecorder.release();
  25.                                         }
  26.                                         break;
  27.                                 case TelephonyManager.CALL_STATE_RINGING:   //响铃状态
  28.                                         File file = new File(Environment.getExternalStorageDirectory() ,
  29.                                                         System.currentTimeMillis() + ".3gp");
  30.                                         mediaRecorder = new MediaRecorder();   //实例化媒体录音对象
  31.                                         mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);   //设置麦克风
  32.                                         mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);  //设置输出的格式
  33.                                         mediaRecorder.setOutputFile(file.getAbsolutePath());   //设置输出的文件
  34.                                         mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);  //设置编码
  35.                                         break;
  36.                                 case TelephonyManager.CALL_STATE_OFFHOOK:   //接听状态
  37.                                         if(mediaRecorder != null)
  38.                                         {
  39.                                                 mediaRecorder.prepare();
  40.                                                 mediaRecorder.start();
  41.                                         }
  42.                                         break;
  43.                                 }
  44.                         }catch(Exception e)
  45.                         {
  46.                                 e.printStackTrace();
  47.                         }
  48.                 }
  49.         }

  50.         @Override
  51.         public void onDestroy() {
  52.                 // TODO Auto-generated method stub
  53.                 Log.i("PhoneService","onDestroy()");
  54.                 super.onDestroy();
  55.         }

  56.         @Override
  57.         public int onStartCommand(Intent intent, int flags, int startId) {
  58.                 // TODO Auto-generated method stub
  59.                 Log.i("PhoneService","onStartCommand()");
  60.                 return super.onStartCommand(intent, flags, startId);
  61.         }

  62.         @Override
  63.         public IBinder onBind(Intent arg0) {
  64.                 // TODO Auto-generated method stub
  65.                
  66.                 return null;
  67.         }

  68. }
复制代码

启动服务:

  1. Intent intent = new Intent(this, PhoneService.class);
  2.   startService(intent);
复制代码













小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-11-12 23:10:15 | 显示全部楼层
@百日维新 玄玄辛苦了,支持下~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-13 13:47:15 | 显示全部楼层
这个不是java么。。。
在android上可以使用QT库,用C++开发~~~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-15 17:52:54 | 显示全部楼层
拈花小仙 发表于 2014-11-12 23:10
@百日维新 玄玄辛苦了,支持下~

没有收到艾特。。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-15 17:55:54 | 显示全部楼层
强烈支持楼主ing,放java板块去吧,便于管理
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-11-15 19:07:32 | 显示全部楼层
这是C嘛……我的眼睛……不忍直视
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-28 03:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表