2012-08-16 3 views
2

Android 및 Java를 처음 사용합니다. 다음 코드는 SMS를 보내고 기다리는 것입니다. 프로세스가 약 3 분이 걸릴 수 있으므로 SMS를받을 때까지 progressDialog가 있어야합니다. 이 작업을 위해 애플릿을 보내 주시겠습니까?SMS 수신을 기다리는 동안 진행 대화를 만들 수 있습니다.

package com.examples.TOLD; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.telephony.SmsMessage; 
import android.util.Log; 


public class SmsReceiver extends BroadcastReceiver{ 

public void onReceive(Context context, Intent intent) 
{ 
    Bundle bundle=intent.getExtras(); 

    Object[] messages=(Object[])bundle.get("pdus"); 
    SmsMessage[] sms = new SmsMessage[messages.length]; 

    for(int n=0;n<messages.length;n++){ 
     sms[n]=SmsMessage.createFromPdu((byte[]) messages[n]); 
    } 

    for(SmsMessage msg:sms){ 
     String num = msg.getOriginatingAddress(); 
     Log.i("SMS sender",num); 
     if (num.equals("15555215556")) { 
     Sms.updateMessageBox("\nFrom: " + msg.getOriginatingAddress() + 
       "\n" + "Message: " + msg.getMessageBody() + "\n");}   
    } 
} 
} 
+0

왜 수신기를 만들어서 SMS를받을 수 있습니까? 이것을 읽어보십시오 ---> http://developer.android.com/reference/android/content/BroadcastReceiver.html –

+0

앱이 SMS를 보내고 그 번호가 SMS에 회신하기를 기다립니다. 과정은 어느 정도 시간이 걸립니다. 그래서 진행 대화가 필요합니다. 실례합니다 당신이 보낸 링크를 꽤 이해하지 못합니다. – brompton

답변

1

여러분의 접근 방식을 다시 생각해 볼 수 있다고 생각합니다. 사용자가 SMS를 최대 3 분 동안 기다리는 것을 기대할 수는 없습니다. 그래서 코드가 올바르게 보이지만 (나중에 설명 하겠지만 정적 메서드의 일부만 제외하고), 일단 메시지가 보내지면 앱이 메시지를 기다리고 있다는 메시지를 표시하고 메시지가 SmsReceiver이면 Sms 활동으로 통신 할 수 있습니다. 합니다 (SmsReceiverSMS 활동을 발사 할 때 UI가 배경이나 가장 중요한에 업데이트 할 수 없습니다 수도 비 존재)

그러나, 당신은 여러 가지 이유로 활동의 내용을 업데이트하는 정적 방법을 사용해서는 안 . 올바른 방법은 수신자에게 의도를 전송하는 것입니다. 이 link에 포함 된 pdf의 SMS 메시지 수신 섹션에 단계별 예제가 자세히 나와 있습니다.

+0

내가 그 부분을 놓친 것일 수 있습니다. pdf의 예제에는 progressdialog를 추가하는 방법이 포함되어 있지 않습니다. 이걸 나에게 보여줄 수 있니? – brompton

+0

이 예제에서는 ProgressDialog를 표시하는 방법을 보여주지 않습니다. 이렇게 할 수 있습니다 : ProgressDialog 대화 상자 = 새 ProgressDialog (컨텍스트); dialog.setMessage ("message"); dialog.show(); 하지만 수신기에서 정적 메서드를 통해 활동에 연락하려고하면 문제가 계속 동일하게 나타납니다. 앱이 충돌합니다. ProgressDialog를 닫을 수있는 인 텐트를 보내기위한 정적 메서드를 변경하는 방법은 pdf의 예제를 참조하십시오. – fegabe

0

내가 보내는 생각하지 말고 수신이 메인 스레드에 있어야합니다 : 여기

package com.examples.TOLD; 
import android.app.Activity; 
import android.os.Bundle; 
import android.content.Intent; 
import android.telephony.SmsManager; 
import android.util.Log; 
import android.widget.TextView; 

public class Sms extends Activity { 
/** Called when the activity is first created. */ 

static TextView smsReceive; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{  
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.sms); 

    Intent i = getIntent(); 
    // Receiving the Data 
    String reg = i.getStringExtra("reg"); 
    String port = i.getStringExtra("port"); 

    String smsMessage = 
     "REG=" + reg + 
     "PORT=" + port; 

    // Show SMS sent message on screen 
    TextView smsSend = (TextView) findViewById(R.id.smsSend); 
    smsSend.setText(smsMessage); 
    Log.i("smsSend",String.valueOf(smsSend.getText())); 
    // Send SMS message 
    SmsManager sm = SmsManager.getDefault(); 
    String number = "5556"; 
    sm.sendTextMessage(number, null, smsMessage, null, null); 

    // Receive SMS message 
    smsReceive = (TextView) findViewById(R.id.smsReceive); 

} 
public static void updateMessageBox(String msg) 
{ 
    smsReceive.append(msg); 
}  
} 

는 SMS를받을 수있는 또 다른 클래스입니다. AsyncTask를 사용하여 백그라운드에서 메시지를 수신 할 수 있습니다. 작업을 시작하기 전에 대화 상자를 표시하고 수신 후 닫기

0

무통 배경 스레딩을위한 Lookup http://developer.android.com/reference/android/os/AsyncTask.html.

OnPreExecute에 진행률 대화 상자를 표시하고 작업이 OnPostExecute에 도달하면이를 닫습니다.

+0

나는 질문 할 수있다 : AsyncTask는 "extends"를 사용해야한다. 클래스가 "BroadcastReceiver를 확장"하므로 "SmsReceiver"에서 어떻게 할 수 있습니까? 이것은 당신에게 쉬운 일일 것입니다. 미안 해요, 이거 처음이에요. – brompton

+0

괜찮습니다. AsyncTask를 확장하는 내부 클래스 만 만들면됩니다. 예를 들면 다음과 같습니다. class LookThroughSMS는 AsyncTask를 확장합니다. 내부 클래스의 메시지를 읽거나 글로벌 변수로 만들거나 LookThroughSMS 클래스의 생성자로 전달해야하는 경우 – Slickelito

관련 문제