2017-06-06 2 views
-2

Je souhaite implémenter une application qui ne sera jamais supprimée une fois installée et contrôler chaque SMS reçu.Implémentation de BroadcastReceiver en tant que service - Android

Je pensais implémenter Service dans mon application qui contient une instance de BroadcastReciever.

Pouvez-vous m'aider à mettre cela en pratique par un exemple, et est-ce que c'est la bonne OOD à cet effet?

Thx !!

+1

Il n'y a rien qui ne peut pas être tué par le système d'exploitation – tyczj

Répondre

2

1.Vous êtes une chose juste adaptée à votre solution. Il n'y a pas de service qui n'est pas tué par le système.

2.You besoin d'une caisse BroadCastReciver pour lire chaque message entrant .please trouverez ci-dessous le code d'enregistrement de classe entrant SMS lecteur, manifeste

3.Quand votre BroadCastReciver entrant vous Déclenche devez appeler le service de BroadCastReciver et laissez-passer SMS données à traiter pour un traitement ultérieur.

4. De cette façon, vous n'avez pas besoin de vous inquiéter du service est tué par le système.

AndroidManifest.xml Details du fichier:

  1. récepteur racontons dans AndroidManifest


    1. Donner la permission de lecture de SMS dans AndroidManifest

Code complet pour AndroidManifest.xml fichier:

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

détails du fichier 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); 

} 

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

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

« 4.In cette façon, vous ne devez pas vous inquiéter au sujet du service est tué par système. » - Vous vouliez dire que tant que cette application existerait, même un service de redémarrage du système (pas de réinitialisation d'usine) resterait en vie sans exécuter à nouveau mon application après que le système ait fini de démarrer? – Batman

+0

non cela signifie que vous avez besoin d'attraper chaque 'SMS', donc chaque fois que tout' sms entrant vient le déclencheur 'BroadcasteReciver' et ensuite' startService' pour faire votre tâche. Si le système tue votre service, il redémarrera chaque fois qu'un nouveau 'SMS' arrivera. –

+0

ok, puis fonctions BroadcastReciver même si je n'ai pas exécuté mon application installée, même après un démarrage du téléphone? – Batman