2017-06-06 60 views
-2

我想實現一旦安裝它就永遠不會被終止的應用程序,並監視收到的每個收到的SMS。實現BroadcastReceiver即服務 - Android

我想在我的應用程序中實施服務,它擁有BroadcastReciever的實例。

你能幫我通過一個例子來實現嗎?爲了達到這個目的,這是否是正確的OOD?

Thx !!

+1

沒有什麼,不能由OS – tyczj

回答

2

1.您的解決方案僅適用於您。沒有服務是沒有被系統殺死的。

2.You需要一個箱子到BroadCastReciver讀取每個傳入消息。請看看下面的代碼註冊傳入SMS讀取器類,清單

3.當您收到的BroadCastReciver觸發您需要從BroadCastReciver和通呼叫服務SMS要進一步處理的服務數據。

4.這樣你就不用擔心服務被System殺死了。

AndroidManifest.xml文件細節:在AndroidManifest

  1. 申報接收機


    在AndroidManifest
  • 給讀取短信權限

  • 爲AndroidManifest.xml文件完整代碼:

    <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
        package="com.androidexample.broadcastreceiver" 
        android:versionCode="1" 
        android:versionName="1.0" > 
    
        <application 
         android:allowBackup="true" 
         android:icon="@drawable/ic_launcher" 
         android:label="@string/app_name" 
         android:theme="@style/AppTheme" > 
         <activity 
          android:name="com.androidexample.broadcastreceiver.BroadcastNewSms" 
          android:label="@string/app_name" > 
          <intent-filter> 
           <action android:name="android.intent.action.MAIN" /> 
    
           <category android:name="android.intent.category.LAUNCHER" /> 
          </intent-filter> 
         </activity> 
    
         <receiver android:name="com.androidexample.broadcastreceiver.IncomingSms"> 
          <intent-filter> 
           <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
          </intent-filter> 
         </receiver> 
    
        </application> 
        <uses-sdk 
         android:minSdkVersion="8" 
         android:targetSdkVersion="17" /> 
    
        <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> 
        <uses-permission android:name="android.permission.READ_SMS" /> 
        <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> 
    
    </manifest> 
    

    IncomingSms.java文件的詳細信息:

    I have made broadcast event reciever in this file 
    
    1. Created class IncomingSms with extends BroadcastReceiver class 
    
    
    
    public class IncomingSms extends BroadcastReceiver 
    
    
         2. Get the object of SmsManager to find out received sms details 
    
    
    
    // Get the object of SmsManager 
    final SmsManager sms = SmsManager.getDefault(); 
    
    
         3. Create method receiver() 
    
    
    
    public void onReceive(Context context, Intent intent) 
    
    
         4. Get/Read current Incomming SMS data 
    
    
    
    // Retrieves a map of extended data from the intent. 
    final Bundle bundle = intent.getExtras(); 
    
    try { 
    
        if (bundle != null) { 
    
         final Object[] pdusObj = (Object[]) bundle.get("pdus"); 
    
         for (int i = 0; i < pdusObj.length; i++) { 
    
          SmsMessage currentMessage = SmsMessage.createFromPdu((byte[]) pdusObj[i]); 
          String phoneNumber = currentMessage.getDisplayOriginatingAddress(); 
    
          String senderNum = phoneNumber; 
          String message = currentMessage.getDisplayMessageBody(); 
    
          Log.i("SmsReceiver", "senderNum: "+ senderNum + "; message: " + message); 
    
    
          // Show alert 
          int duration = Toast.LENGTH_LONG; 
          Toast toast = Toast.makeText(context, "senderNum: "+ senderNum + ", message: " + message, duration); 
          toast.show(); 
    
         } // end for loop 
         } // bundle is null 
    
    } catch (Exception e) { 
        Log.e("SmsReceiver", "Exception smsReceiver" +e); 
    
    } 
    

    ======= ======================================= ================================================== =

    ​​

    Incomming SMS Broadcast Receiver - Android Example

    +0

    被殺死「4.In這樣你就不需要擔心服務是由系統打死。」 - 你的意思是隻要這個應用程序存在,即使系統重新啓動(不是工廠重置)服務將保持活着狀態,而不需要在系統完成啓動後再次運行我的應用程序? – Batman

    +0

    不,這意味着你需要捕捉每個'SMS',所以每當有傳入的'sms'來到'BroadcasteReciver'觸發器,然後你'啓動服務'來完成你的任務。如果系統終止你的服務,它會在任何新的'SMS'出現時重新啓動。 –

    +0

    好的,那麼即使在手機啓動後我還沒有運行我的已安裝應用程序,BroadcastReciver的功能仍然存在? – Batman