-1

사람이 빨리 들어오는 SMS 이벤트 거기로 내 안드로이드 서비스를 "일어나"할 수 있다면 말해 주실 래요 시스템의 SMS 방송 수신기에서 안드로이드 서비스를 시작? 내가 말하고자하는 것은 SMS가 수신 될 때마다이 사건에 대한 시스템 차원의 방송이있을 것이라는 것입니다. 이 브로드 캐스트를 가로 채서 내 배경 서비스를 시작할 수 있습니까? 나도 알아, 내 서비스를 백그라운드에서 영구적으로 실행할 수는 없습니다 (나쁜 디자인 습관은 말할 것도 없습니다).

도움이 되었으면 좋겠습니다.

편집 : 내 원래의 질문에 자세한 내용을 추가. 내 브로드 캐스트 리시버가 서비스 클래스 안에 래핑됩니다. 그러나 메모리 위기 상황에서 안드로이드가 백그라운드 서비스를 중단 할 가능성이 있습니다. 이 경우 들어오는 SMS가 있어도 내 서비스가 해고되지 않습니다. 이 상황을 어떻게 처리 할 수 ​​있습니까? 이것은 질문의 주된 의도였습니다. 나는 백그라운드에서 영구적으로 내 서비스를 실행할 수 없습니다 알고있다 (I 루트 액세스 권한이 아마도 경우? 또는 가능?)

+0

에서

public void recivedSms(String message) { try { Log.d("message is receive", message); } catch (Exception e) { Log.e("message not receive", e.getMessage() + ""); } } 

추가 권한 그래 당신은 그것을 할 수 있습니다. 당신은 SMS 수신 브로드 캐스트 리시버에 등록 할 수 있습니다. 기기에 새로운 SMS가 도착할 때 알림이 전송됩니다. –

+1

왜 작동하는지 의심 스럽습니까? 당신이 그것을하려고하면 당신이 그것을 잘 작동 볼 수 –

+0

예 수, the'BroadcastReceiver'의 내부'onReceive' 때문에하는'매개 변수로 context'있다. 따라서 응용 프로그램을 시작하거나 새로운 서비스를 시작할 수 있습니다. – Vasilisfoo

답변

0

매니페스트

<receiver android:name=".BrodcastReceiverClass "> 
      <intent-filter> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </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) { 

     } 
    } 
} 

등록 BrodcastReceiver 만들기 예를 들어, 활동 이름에 대한 당신의 활동에

전화는 OTPActivity에서 생 코드를 작성하는 것보다 OTPActivity입니다. 매니페스트 읽기 SMS를

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

* 예를 들어 활동 이름이 OTPActivity. *로 쓰여져있는 것보다 활동 이름이 OTPActivity 인 활동이 필요합니다. ** ** 앱 직접 당신은 SMS를 –

+0

'OTPActivity SMS는 = 새로운 OTPActivity()에서 처리 OTPActivity는 OTPActivity에 쓰는 것보다 OTPActivity 때문에이 코드를 작성합니다. 우리가 brodcast 수신기보다 자동 OTP (sms) 검증이 필요하다면 OTPActivity 활동에서 msg를 보내십시오. –

+0

를 열 때 실행되는 코드에서 활동을, 특히하지의 인스턴스를 결코', 그냥 브로드 캐스트 리시버 –