2016-07-04 13 views
-1

Kann mir bitte jemand sagen, ob es möglich ist, meinen Android-Dienst "aufzuwecken", sobald ein SMS-Ereignis eingeht? Was ich sagen wollte, ist, dass jedes Mal, wenn eine SMS empfangen wird, eine systemweite Übertragung dieses Ereignisses erfolgt. Kann ich diese Sendung abfangen, um meinen eigenen Hintergrunddienst zu starten? Ich weiß, es ist nicht möglich, meinen Dienst permanent im Hintergrund zu betreiben (ganz zu schweigen von der schlechten Design-Praxis).Starten eines Android-Dienstes vom SMS-Broadcast-Empfänger des Systems

Jede Hilfe wäre sehr geschätzt!

EDIT: Hinzufügen von mehr Details zu meiner ursprünglichen Frage. Mein Broadcast-Empfänger wird in eine Serviceklasse verpackt. Aber es gibt eine Chance, dass das Android meinen Hintergrunddienst im Falle des Speicherknirschens tötet. In diesem Fall wird der Dienst selbst bei einer eingehenden SMS nicht ausgelöst. Wie kann ich mit dieser Situation umgehen? Das war die Hauptabsicht der Frage. Ich weiß, dass es nicht möglich ist, meinen Dienst permanent im Hintergrund laufen zu lassen (oder ist es möglich? Vielleicht, wenn ich Root-Zugriff habe?)

+0

ja Sie können es tun. Sie können sich für den SMS Broadcast Empfänger anmelden. und Sie werden benachrichtigt, wenn das Gerät eine neue SMS erhält. –

+1

Warum bezweifeln Sie, dass es funktioniert? Wenn Sie es versuchen, werden Sie sehen, es funktioniert gut –

+0

Ja, Sie können, weil innerhalb 'onReceive' des' BroadcastReceiver', gibt es einen 'Kontext' als Parameter. Sie haben also die Möglichkeit, Ihre Anwendung zu starten oder einen neuen Dienst zu starten. – Vasilisfoo

Antwort

0

erstellen Broadcast-Receiver

public class BrodcastReceiverClass extends BroadcastReceiver 
{ 

    @Override 
    public void onReceive(Context context, Intent 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(); 
        try { 
         if (senderNum.equals("MD-DOCOMO")){ //SMS Provider Name 
          OTPActivity Sms = new OTPActivity(); 
          Sms.recivedSms(message); 
         } 
        } catch (Exception e) { 
        } 

       } 
      } 

     } catch (Exception e) { 

     } 
    } 
} 

Register BrodcastReceiver in Ihrem Manifest

<receiver android:name=".BrodcastReceiverClass "> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 

rufen Sie in Ihrer Aktivität für zB Ihre Aktivität Name ist OTPActivity als schreiben thi Code in Ihrer OTPActivity.

public void recivedSms(String message) { 
     try { 
      Log.d("message is receive", message); 



     } catch (Exception e) { 
      Log.e("message not receive", e.getMessage() + ""); 
     } 
    } 

Add Erlaubnis in manifest SMS lesen

<uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
+0

* Rufen Sie Ihre Aktivität an, z. B. ist Ihr Aktivitätsname OTPActivity, als diesen in Ihrer OTPActivity zu schreiben. * Das ist absolut nicht notwendig. Behandeln Sie es einfach im Broadcastreceiver –

+0

'OTPActivity Sms = neue OTPActivity();' ** nie ** manuell Aktivitäten instanziieren, vor allem nicht aus Code, der ausgeführt wird, wenn Ihre App nicht geöffnet ist –

+0

Sie vermissen Berechtigung zum Lesen von SMS –

Verwandte Themen