mService1.java
上传用户:vip_99
上传日期:2021-03-27
资源大小:61159k
文件大小:4k
源码类别:

android开发

开发平台:

Java

  1. package irdc.ex06_17;
  2. import android.app.Service;
  3. import android.content.BroadcastReceiver;
  4. import android.content.Context;
  5. import android.content.Intent;
  6. import android.content.IntentFilter;
  7. import android.os.Bundle;
  8. import android.os.Handler;
  9. import android.os.IBinder;
  10. import android.telephony.gsm.SmsMessage;
  11. import android.util.Log;
  12. /* 自定义系统服务,当聆听到信息事件时,则广播自定义信息 */
  13. public class mService1 extends Service
  14. {
  15.   /* Handler对象 */
  16.   private Handler objHandler = new Handler();
  17.   private int intCounter=0;
  18.   
  19.   /* 自定义广播识别ACTIOIN常数 */
  20.   public static final String HIPPO_SERVICE_IDENTIFIER = 
  21.                              "HIPPO_ON_SERVICE_001";
  22.   
  23.   /* 系统接收短信的广播ACTION常数 */
  24.   private static final String HIPPO_SMS_ACTION = 
  25.           "android.provider.Telephony.SMS_RECEIVED";
  26.   
  27.   /* 自定义短信mSMSReceiver对象 */
  28.   private mSMSReceiver mReceiver01;
  29.   
  30.   /* 是否为debug模式,需要在console里输出Log */
  31.   private static boolean bIfDebug = true;
  32.   
  33.   private Runnable mTasks = new Runnable() 
  34.   { 
  35.     public void run() 
  36.     { 
  37.       intCounter++;
  38.       Log.i("HIPPO", "Counter:"+Integer.toString(intCounter));
  39.       objHandler.postDelayed(mTasks, 1000); 
  40.     } 
  41.   };
  42.   
  43.   @Override
  44.   public void onStart(Intent intent, int startId)
  45.   {
  46.     // TODO Auto-generated method stub
  47.     
  48.     if(bIfDebug)
  49.     {
  50.       objHandler.postDelayed(mTasks, 1000);
  51.     }
  52.     super.onStart(intent, startId);
  53.   }
  54.   @Override
  55.   public void onCreate()
  56.   {
  57.     // TODO Auto-generated method stub
  58.     
  59.     /* 向系统注册receiver,聆听系统短信广播事件 */
  60.     IntentFilter mFilter01;
  61.     mFilter01 = new IntentFilter(HIPPO_SMS_ACTION);
  62.     mReceiver01 = new mSMSReceiver();
  63.     registerReceiver(mReceiver01, mFilter01);
  64.     
  65.     super.onCreate();
  66.   }
  67.   
  68.   @Override
  69.   public IBinder onBind(Intent intent)
  70.   {
  71.     // TODO Auto-generated method stub
  72.     return null;
  73.   }
  74.   @Override
  75.   public void onDestroy()
  76.   {
  77.     // TODO Auto-generated method stub
  78.     
  79.     objHandler.removeCallbacks(mTasks);
  80.     unregisterReceiver(mReceiver01);
  81.     super.onDestroy();
  82.   }
  83.   
  84.   /* 当收到系统短信广播事件后的事件处理 */
  85.   public class mSMSReceiver extends BroadcastReceiver
  86.   {
  87.     @Override
  88.     public void onReceive(Context context, Intent intent)
  89.     {
  90.       // TODO Auto-generated method stub
  91.       
  92.       /* 判断是否为系统广播的短信ACTION */
  93.       if (intent.getAction().equals(HIPPO_SMS_ACTION))
  94.       {
  95.         StringBuilder sb = new StringBuilder();
  96.         Bundle bundle = intent.getExtras();
  97.         
  98.         if (bundle != null)
  99.         {
  100.           /* 拆解与识别SMS短信 */
  101.           Object[] myOBJpdus = (Object[]) bundle.get("pdus");
  102.           SmsMessage[] messages = new SmsMessage[myOBJpdus.length];
  103.           for (int i = 0; i<myOBJpdus.length; i++)
  104.           { 
  105.             messages[i] = 
  106.             SmsMessage.createFromPdu((byte[]) myOBJpdus[i]);
  107.           }
  108.           //Log.i(LOG_TAG, "[SMSApp Bundle] " + bundle.toString());
  109.            
  110.           /* 将送来的短信合并自定义信息于StringBuilder当中 */ 
  111.           for (SmsMessage currentMessage : messages)
  112.           {
  113.             sb.append(currentMessage.getDisplayOriginatingAddress());
  114.             /* 在电话与SMS短信BODY之间,加上分隔TAG */
  115.             sb.append(EX06_17.strDelimiter1);
  116.             sb.append(currentMessage.getDisplayMessageBody());
  117.           }
  118.           
  119.           /* 向系统广播自定义信息 */
  120.           Intent i = new Intent(HIPPO_SERVICE_IDENTIFIER);
  121.           i.putExtra("STR_PARAM01", sb.toString());
  122.           
  123.           /* 以sendBroadcast送出广播信息 */
  124.           sendBroadcast(i);
  125.         }
  126.       }
  127.       else
  128.       {
  129.         Intent i = new Intent(HIPPO_SERVICE_IDENTIFIER);
  130.         i.putExtra("STR_PARAM01", intent.getAction().toString());
  131.         sendBroadcast(i);
  132.       }
  133.     }
  134.   }
  135. }