2017-06-06 2 views
-2

Ich möchte eine Anwendung implementieren, die nie getötet werden wird, sobald es installiert wurde, und überwachen alle eingehende SMS erhalten.Implementieren BroadcastReceiver als Dienst - Android

Ich dachte, Service in meiner Anwendung zu implementieren, die Instanz von BroadcastReceiver hält.

Können Sie mir helfen, das mit einem Beispiel zu implementieren, und wird dies der richtige OOD für diesen Zweck sein?

Thx !!

+1

Es gibt nichts, das von den OS – tyczj

Antwort

2

1. Sie sind Sache, die zu Ihrer Lösung gerade passend ist. Es gibt keinen Dienst, der nicht vom System getötet wird.

2.You Notwendigkeit Kiste ein BroadCastReciver jede eingehende Nachricht zu lesen Code unten .please zu finden für die Registrierung Incoming SMS Leserklasse, manifestieren

3.When Ihre Incoming BroadCastReciver Trigger Sie Service von BroadCastReciver und Pass anrufen müssen SMS Daten für den weiteren Prozess zu warten.

4.Auf diese Weise müssen Sie sich keine Sorgen machen, dass der Dienst vom System beendet wird.

AndroidManifest.xml Datei-Details:

  1. Declare Empfänger in AndroidManifest


    1. Give lesen SMS Erlaubnis in AndroidManifest

komplette Code für AndroidManifest.xml Datei:

<?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 Datei Details:

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); 

} 

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

Complete code for IncomingSms.java file : 



public class IncomingSms extends BroadcastReceiver { 

    // Get the object of SmsManager 
    final SmsManager sms = SmsManager.getDefault(); 

    public void onReceive(Context context, Intent intent) { 

     // 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

getötet werden kann nicht „4.In dieses Weisen Sie kümmern müssen nicht über den Service vom System getötet wird.“ - Sie meinten, dass, solange diese Anwendung existiert, selbst ein Systemneustart (nicht Factory Reset) am Leben bleiben wird, ohne meine Anwendung nach dem Systemstart erneut auszuführen? – Batman

+0

nein, das bedeutet, dass Sie jede 'SMS' abfangen müssen, also wann immer eine eingehende' sms' kommt, kommt 'BroadcasteReciver' und starten Sie Ihre Aufgabe mit' startService'. Wenn das System Ihren Dienst beendet, wird es neu gestartet, sobald eine neue 'SMS' kommt. –

+0

ok, dann BroadcastReciver funktioniert auch, wenn ich meine installierte Anwendung auch nach einem Telefonstart nicht ausgeführt habe? – Batman

Verwandte Themen