2017-01-10 12 views
-3

SMS 수신 알림을 표시하는 코드를 작성하려고합니다. 내 문제는 내가 주요 활동에 브로드 캐스트 리시버를 구현하는 방법이다. 브로드 캐스트 리시버를 확장하는 다른 클래스를 만들려고한다면 어떻게하면 메인 클래스에서 호출 할 수 있습니까? 메시지가 수신 되 자마자 자동으로 기능을 시작합니까, 아니면 주 활동에서 자극 받아야합니까?SMS 수신 및 알림 표시

답변

0

만약 내가 당신이라면, 번들 값을 전달한 브로드 캐스트 리시버의 onReceive 메소드에 인 텐트 콜을 넣고 mainactivity look에서 해당 번들이 존재하는지 확인하고 만약 그렇다면 원하는 액션을 수행 할 것입니다. do (예 : 대화 상자, 토스트보기 등).

0

브로드 캐스트 수신자는 코드 또는 매니페스트 XML을 통해 올바르게 등록되어있는 한 Android에서 호출됩니다. 수신기 콜백의 context에 액세스 할 수 있습니다. 이 컨텍스트에서 알림 (이 질문의 제목을 기반으로)을 만들거나 Application 하위 클래스 IF에 액세스하여을 매니페스트 XML에 선언 할 수 있습니다.

1

this 님의 질문이 있으십니까? 어쨌든 이것을 시도 :

public class SmsListener extends BroadcastReceiver{ 

    private SharedPreferences preferences; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // TODO Auto-generated method stub 

     if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")){ 
      Bundle bundle = intent.getExtras();   //---get the SMS message passed in--- 
      SmsMessage[] msgs = null; 
      String msg_from; 
      if (bundle != null){ 
       //---retrieve the SMS message received--- 
       try{ 
        Object[] pdus = (Object[]) bundle.get("pdus"); 
        msgs = new SmsMessage[pdus.length]; 
        for(int i=0; i<msgs.length; i++){ 
         msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
         msg_from = msgs[i].getOriginatingAddress(); 
         String msgBody = msgs[i].getMessageBody(); 
        } 
       }catch(Exception e){ 
//       Log.d("Exception caught",e.getMessage()); 
       } 
      } 
     } 
    } 
} 

참고 : 매니페스트 파일에서 BroadcastReceiver-

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

를 추가하려면 추가를이 권한을 : 또한

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

당신이 통지를 구축 Notification.Builder

를 사용하여
0

@another, fol에서 구현해보세요. 낮 방법 :

public class MyActivity extends Activity { 
    private BroadcastReceiver receiver = new 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); 

     } 
    } 
    }); 

    public void onResume() { 
     super.onResume(); 

     IntentFilter filter = new IntentFilter(); 
     filter.addAction(BROADCAST_ACTION); 

     this.registerReceiver(this.receiver, filter); 
    } 

    public void onPause() { 
     super.onPause(); 

     this.unregisterReceiver(this.receiver); 
    } 
}