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

android开发

开发平台:

Java

  1. package irdc.ex08_17;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.File;
  5. import java.io.FileReader;
  6. import java.io.FileWriter;
  7. import java.io.InputStream;
  8. import java.net.HttpURLConnection;
  9. import java.net.URL;
  10. import java.util.regex.Matcher;
  11. import java.util.regex.Pattern;
  12. import android.app.Service;
  13. import android.content.Intent;
  14. import android.os.Handler;
  15. import android.os.IBinder;
  16. import android.util.Log;
  17. import android.widget.Toast;
  18. public class mService1 extends Service
  19. {
  20.   /* 执行绪 */
  21.   private Handler objHandler = new Handler();
  22.   private int intCounter=0;
  23.   
  24.   /* 更新?震信息的毫秒 */
  25.   public int intUpdateSecond = 5000;
  26.   private String TAG = "HIPPO";
  27.   private String strRet = "";
  28.   
  29.   /* ?震纪录Log档案 */
  30.   private static String strEarthLog = "/sdcard/earthquakelist.log";
  31.   
  32.   /* 前几次的?震记录?串 */
  33.   private String strLastRecord;
  34.   
  35.   /* 重组?串用的分隔?串 */
  36.   public static String strDelimiter1 = "<delimiter1>";
  37.   public static String strDelimiter2 = "<delimiter2>";
  38.   
  39.   private Runnable mTasks = new Runnable() 
  40.   { 
  41.     public void run() 
  42.     { 
  43.       if(checkSDCard())
  44.       {
  45.         intCounter++;
  46.         
  47.         /* 呼?告订中央气象局API处理函数 */
  48.         cwbEarthQuake();
  49.         Log.i(TAG, "Counter:"+Integer.toString(intCounter));
  50.         objHandler.postDelayed(mTasks, intUpdateSecond);
  51.       }
  52.       else
  53.       {
  54.         mMakeTextToast
  55.         (
  56.           getResources().getText(R.string.str_err_nosd).toString(),
  57.           true
  58.         );
  59.       }
  60.     }
  61.   };
  62.   
  63.   /* 告订?取中央气象局的?震信息函数 */
  64.   private void cwbEarthQuake()
  65.   {
  66.     /* 中央气象局?震发?网页 */
  67.     String uriAPI = "http://www.cwb.gov.tw/V5/seismic/quake_index.htm";
  68.     
  69.     try
  70.     {
  71.       strLastRecord = "";
  72.       
  73.       /* ?断记忆叻里是?有?震Log */
  74.       File myFile = new File(strEarthLog);
  75.       if(myFile.exists())
  76.       {
  77.         /* 读取前次Log纪录 */
  78.         StringBuilder contents = new StringBuilder();
  79.         BufferedReader input =  new BufferedReader(new FileReader(myFile));
  80.         String line = null;
  81.         while((line=input.readLine()) != null)
  82.         {
  83.           contents.append(line);
  84.           contents.append(System.getProperty("line.separator"));
  85.         }
  86.         strLastRecord = contents.toString();
  87.       }
  88.       else
  89.       {
  90.         /* first time or no log found */
  91.         strLastRecord = "";
  92.       }
  93.       strLastRecord = strLastRecord.trim();
  94.     }
  95.     catch(Exception e)
  96.     {
  97.       e.printStackTrace();
  98.     }
  99.     
  100.     strRet = parseCWHTML(getMethod(uriAPI, "big5"));
  101.     if(strRet!="")
  102.     {
  103.       if(strLastRecord.equals(strRet))
  104.       {
  105.         /* 未发现新的?震消息 */
  106.         Log.i(TAG, "Not Found.");
  107.       }
  108.       else
  109.       {
  110.         /* 写丈否次网络API?取后的纪录 */
  111.         if(writeCWLog(strRet))
  112.         {
  113.           /* 正确?檔 */
  114.         }
  115.         else
  116.         {
  117.           Log.i
  118.           (
  119.             TAG, getResources().getText(R.string.str_err_writefile).toString()
  120.           );
  121.         }
  122.         
  123.         /* 发现新?震发?讯息 */
  124.         String strOpt = getNewEarthquake(strRet);
  125.         if(strOpt!="")
  126.         {
  127.           /* 北Toast显示?震资消息!*/
  128.           mMakeTextToast(strOpt, true);
  129.         }
  130.       }
  131.     }
  132.   }
  133.   
  134.   /* 取得最新几笔?震信息 */
  135.   private String getNewEarthquake(String strLog)
  136.   {
  137.     String strReturn = "";
  138.     try
  139.     {
  140.       if(eregi(strDelimiter1, strLog) && eregi(strDelimiter2, strLog))
  141.       {
  142.         String[] aryTemp001 = strLog.split(strDelimiter1);
  143.         String[] aryTemp002 = aryTemp001[0].split(strDelimiter2);
  144.         for(int i=0;i<aryTemp002.length;i++)
  145.         {
  146.           if(i==(aryTemp002.length-1))
  147.           {
  148.             strReturn += aryTemp002[i];
  149.           }
  150.           else
  151.           {
  152.             if(i==1)
  153.             {
  154.               strReturn += getResources().getText(R.string.str_quake_level).toString()+aryTemp002[i]+"n";
  155.             }
  156.             else
  157.             {
  158.               strReturn += aryTemp002[i]+"n";
  159.             }
  160.           }
  161.         }
  162.       }
  163.     }
  164.     catch(Exception e)
  165.     {
  166.       e.printStackTrace();
  167.     }
  168.     return strReturn;
  169.   }
  170.   
  171.   /* 告订写丈?震Log纪录档案 */
  172.   private boolean writeCWLog(String strCWLog)
  173.   {
  174.     try
  175.     {
  176.       if(strCWLog!="")
  177.       {
  178.         BufferedWriter bw;
  179.         bw = new BufferedWriter (new FileWriter(strEarthLog));
  180.         bw.write( strCWLog, 0, strCWLog.length() );
  181.         bw.flush();
  182.         return true;
  183.       }
  184.       else
  185.       {
  186.         return false;
  187.       }
  188.     }
  189.     catch(Exception e)
  190.     {
  191.       return false;
  192.     }
  193.   }
  194.   
  195.   /* ?取气象局网页解析?震资料 */
  196.   private String parseCWHTML(String strCWHTML)
  197.   {
  198.     String strReturn = "";
  199.     if(strCWHTML.trim()!="")
  200.     {
  201.       if(eregi("NewsTable",strCWHTML) && eregi("</table>",strCWHTML))
  202.       {
  203.         try
  204.         {
  205.           String[] aryTemp01 = strCWHTML.split("NewsTable");
  206.           String[] aryTemp02 = aryTemp01[1].split("</table>");
  207.           String[] aryTemp03;
  208.           String[] aryTemp04;
  209.           aryTemp01 = aryTemp02[0].split("<tr>");
  210.           
  211.           for(int i=2;i<aryTemp01.length;i++)
  212.           {
  213.             aryTemp02 = aryTemp01[i].split("href=");
  214.             for(int j=1;j<aryTemp02.length;j++)
  215.             {
  216.               if(j==(aryTemp02.length-1))
  217.               {
  218.                 aryTemp03 = aryTemp02[j].split("</a>");
  219.                 aryTemp04 = aryTemp03[0].split(">");
  220.                 strReturn += eregi_replace("(rn|r|n|nr)","",aryTemp04[1]);
  221.               }
  222.               else
  223.               {
  224.                 aryTemp03 = aryTemp02[j].split("</a>");
  225.                 aryTemp04 = aryTemp03[0].split(">");
  226.                 strReturn += eregi_replace("(rn|r|n|nr)","",aryTemp04[1])+strDelimiter2;
  227.               }
  228.             }
  229.             if(i==(aryTemp01.length-1)){}
  230.             else
  231.             {
  232.               strReturn += strDelimiter1;
  233.             }
  234.           }
  235.           strReturn = strReturn.trim();
  236.         }
  237.         catch(Exception e)
  238.         {
  239.           e.printStackTrace();
  240.         }
  241.       }
  242.     }
  243.     return strReturn;
  244.   }
  245.   
  246.   /* ?断记忆叻是??? */
  247.   private boolean checkSDCard()
  248.   {
  249.     /* android.os.Environment环境状态属性 */
  250.     if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
  251.     {
  252.       return true;
  253.     }
  254.     else
  255.     {
  256.       return false;
  257.     }
  258.   }
  259.   
  260.   /* 声明GET函数 */
  261.   public String getMethod(String strGetURL, String strEncoding)
  262.   {
  263.     String strReturn="";
  264.     try
  265.     {
  266.       HttpURLConnection urlConnection= null;
  267.       URL url=new URL(strGetURL);
  268.       urlConnection=(HttpURLConnection)url.openConnection();
  269.       urlConnection.setRequestMethod("GET");
  270.       urlConnection.setDoOutput(true);
  271.       urlConnection.setDoInput(true);
  272.       urlConnection.setRequestProperty("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
  273.       urlConnection.setRequestProperty("Content-type","text/html; charset="+strEncoding);
  274.       urlConnection.connect();
  275.       InputStream htmlBODY = urlConnection.getInputStream();
  276.       
  277.       if(htmlBODY!=null)
  278.       {
  279.         int leng =0;
  280.         byte[] Data = new byte[100];
  281.         byte[] totalData = new byte[0];
  282.         int totalLeg =0;
  283.         do
  284.         {
  285.           leng = htmlBODY.read(Data);
  286.           if(leng>0)
  287.           {
  288.             totalLeg += leng;
  289.             byte[] temp = new byte[totalLeg];
  290.             System.arraycopy(totalData, 0, temp, 0, totalData.length);
  291.             System.arraycopy(Data, 0, temp, totalData.length, leng);
  292.             totalData = temp;
  293.           }
  294.         }while(leng>0);
  295.         //strReturn = new String(totalData,"UTF-8");
  296.         strReturn = new String(totalData, strEncoding);
  297.       }
  298.     }
  299.     catch(Exception e)
  300.     {
  301.       e.printStackTrace();
  302.     }
  303.     return strReturn;
  304.   }
  305.   
  306.   /* 告订比对字符串函数 */
  307.   public static boolean eregi(String strPat, String strUnknow)
  308.   {
  309.     String strPattern = "(?i)"+strPat;
  310.     Pattern p = Pattern.compile(strPattern);
  311.     Matcher m = p.matcher(strUnknow);
  312.     return m.find();
  313.   }
  314.   
  315.   /* 自定义字符串选取函数 */
  316.   public String eregi_replace(String strFrom, String strTo, String strTarget)
  317.   {
  318.     String strPattern = "(?i)"+strFrom;
  319.     Pattern p = Pattern.compile(strPattern);
  320.     Matcher m = p.matcher(strTarget);
  321.     if(m.find())
  322.     {
  323.       return strTarget.replaceAll(strFrom, strTo);
  324.     }
  325.     else
  326.     {
  327.       return strTarget;
  328.     }
  329.   }
  330.   
  331.   /* 告订Toast函数 */
  332.   public void mMakeTextToast(String str, boolean isLong)
  333.   {
  334.     if(isLong==true)
  335.     {
  336.       Toast.makeText(this, str, Toast.LENGTH_LONG).show();
  337.     }
  338.     else
  339.     {
  340.       Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
  341.     }
  342.   }
  343.   
  344.   @Override
  345.   public void onStart(Intent intent, int startId)
  346.   {
  347.     // TODO Auto-generated method stub
  348.     
  349.     objHandler.postDelayed(mTasks, intUpdateSecond);
  350.     super.onStart(intent, startId);
  351.   }
  352.   @Override
  353.   public void onCreate()
  354.   {
  355.     // TODO Auto-generated method stub
  356.     super.onCreate();
  357.   }
  358.   
  359.   @Override
  360.   public IBinder onBind(Intent intent)
  361.   {
  362.     // TODO Auto-generated method stub
  363.     return null;
  364.   }
  365.   @Override
  366.   public void onDestroy()
  367.   {
  368.     // TODO Auto-generated method stub
  369.     
  370.     objHandler.removeCallbacks(mTasks);
  371.     super.onDestroy();
  372.   }
  373. }