2014-12-30 3 views
2
으로 보냅니다.

두 개의 클래스 인 MainActivity와 SMSMonitorService가 있습니다.onPostExecute() 결과를

MainActivity 클래스에서 AsyncTask를 구현합니다.

SMSMonitorService 클래스에는 두 개의 매개 변수 인 String number와 String responseText가있는 senReplySMS 메서드가 있습니다.

sendReplySMS 매개 변수 (responseText)로 onPostExecute() 결과를 보내려고합니다. 이 앱은 시작되지 않습니다

MainActiviy.class

public class MainActivity extends ActionBarActivity { 
    /*. 
    . Code 
    . 
    */ 

    public class DownloadWebpageTask extends AsyncTask<String, Void, String> { 

    @Override 
    protected String doInBackground(String... urls) { 

     // params comes from the execute() call: params[0] is the url. 
     try { 
      return downloadUrl(urls[0]); 
     } catch (IOException e) { 
      return "Unable to retrieve web page. URL may be invalid."; 
     } 
    } 

    // onPostExecute displays the results of the AsyncTask. 
    @Override 
    protected void onPostExecute(String result) { 

    //Extract String between two delimiters. 

     String finalResult = StringUtils.substringBetween(result, "extract\":\"", "\"}}}}");    
     String finalResponse = StringEscapeUtils.unescapeJava(finalResult); 

     textView.setText(finalResponse);    

     Intent intent = new Intent(MainActivity.this, SMSMonitorService.class); 
     intent.putExtra("onPostResult", finalResponse); 
     startService(intent);    
    } 
} 

SMSMonitorService.class

public void sendReplySMS(String number, String responseText) { 

    SmsManager sms = SmsManager.getDefault(); 
    sms.sendTextMessage(number, null, responseText, null, null); 
} 

public int onStartCommand (Intent intent, int flags, int startId){ 

    String onPostReceive = intent.getStringExtra("onPostResult"); 

    sendReplySMS(number, onPostReceive); 

    return START_STICKY; 
} 

.

어떻게 sendReplySMS 메서드 매개 변수로 onPostExecute() 결과 문자열을 보내나요?

미리 감사드립니다.

편집 :

수정 : 서비스를 실행하기위한 내가 토글 버튼을 누르면, 내가 힘이 가까이 얻을.

로그 캣 :

12-30 00:24:33.647 10929-10929/com.textnet.apitest I/MainActivity﹕ SMSMonitor Started 
12-30 00:24:33.927 10929-10929/com.textnet.apitest I/SMSMonitorService﹕ SMS Monitor service started 
12-30 00:24:33.937 10929-10929/com.textnet.apitest I/SMSMonitorService﹕ Broadcast Receiver registered 
12-30 00:24:33.977 10929-10929/com.textnet.apitest W/dalvikvm﹕ threadid=1: thread exiting with  uncaught exception (group=0x40b099f0)  
12-30 00:24:34.147 10929-10929/com.textnet.apitest E/AndroidRuntime﹕ FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start service [email protected] with Intent { cmp=com.textnet.apitest/.SMSMonitorService }: java.lang.IllegalArgumentException: Invalid destinationAddress 
     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2376) 
     at android.app.ActivityThread.access$1900(ActivityThread.java:123) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4424) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
     at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.IllegalArgumentException: Invalid destinationAddress 
     at android.telephony.SmsManager.sendTextMessage(SmsManager.java:88) 
     at com.textnet.apitest.SMSMonitorService.sendReplySMS(SMSMonitorService.java:31) 
     at com.textnet.apitest.SMSMonitorService.onStartCommand(SMSMonitorService.java:38) 
     at android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2359) 
     at android.app.ActivityThread.access$1900(ActivityThread.java:123) 
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1210) 
     at android.os.Handler.dispatchMessage(Handler.java:99) 
     at android.os.Looper.loop(Looper.java:137) 
     at android.app.ActivityThread.main(ActivityThread.java:4424) 
     at java.lang.reflect.Method.invokeNative(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:511) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
     at dalvik.system.NativeStart.main(Native Method) 

+0

'intent.getStringExtra ("onPostResult"); –

+0

"앱이 시작되지 않습니다"- 무슨 뜻입니까 ?? – Chandrakanth

+0

응용 프로그램이 시작되지 않습니다. 나쁜 영어로 실례합니다. – androidBegginer

답변

0

대신 onStartCommand을 정의하는, 당신이 onHandleIntent를 오버라이드 (override) 할 필요가 있습니다.

SMSMonitorServiceIntentService에서 파생되어야합니다.

+0

감사합니다. 나는 시도 할 것이다. – androidBegginer

0

SMSManager를 호출 한 후 stofSelf()를 호출해야합니다. 서비스가 UI 주 스레드에서 실행 중이며 작업이 완료되면 ANR이 표시 될 수 있습니다. UI Main thread가 5 초 이상 블록을 확보하면 시스템이 ANR을 시작합니다. 관찰 내용을 확인하고 되돌려주십시오.

공공 무효 sendReplySMS (문자열 번호, 문자열에서 responseText) {

SmsManager sms = SmsManager.getDefault(); 
sms.sendTextMessage(number, null, responseText, null, null); 
stopSelf() 

}

+0

감사합니다. 나는 시도 할 것이다. – androidBegginer

+0

공유하는 로그마다 java.lang.IllegalArgumentException이 발생합니다. destinationAddress가 잘못되었습니다. 대상 주소에 올바른 값을 전달하지 못할 수 있습니다. –

+0

'onStarCommand'가 서비스를 활성화하기 위해 실행됩니다. 그 순간에'number'가 비어 있고 responseText도 비어있어서 실패합니다. 어떤 해결책? 진심으로 감사드립니다. – androidBegginer

0

)는 (onStartCommand의 숫자 변수를 확인; 일단 그것이 초기화되었는지 여부를 제대로 확인하고 초기화 된 경우 유효한 전화 번호인지 확인하십시오.

+0

'public String number = "";'SMSMonitorService의 BroadcastReceiver로부터 번호를받습니다. – androidBegginer

+0

유효한 번호를 확인하거나 한 번 번호를 인쇄하고 확인하십시오 ... – KomalG

+0

좋아, 그걸 시도하겠습니다. – androidBegginer

관련 문제