2014-12-30 3 views
2

У меня есть два класса, MainActivity и SMSMonitorService.Отправить onPostExecute() result to Service

В классе MainActivity я реализую AsyncTask.

В классе SMSMonitorService у меня есть метод senReplySMS с двумя параметрами: String number и String responseText.

Я хочу отправить результат onPostExecute() в качестве параметра sendReplySMS (responseText).

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; 
} 

приложение не запускается.

Как отправить строку результата onPostExecute() в качестве параметра метода sendReplySMS?

Спасибо за продвижение.

EDIT:

Исправление: при нажатии на кнопку переключения для запуска службы, я получаю силы близко.

Logcat:

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.

Обратите внимание, что ваш SMSMonitorService должен происходить от IntentService для этого.

+0

Спасибо. Я попробую. – androidBegginer

0

То, что я идентифицирую, вы должны вызвать stofSelf() после вызова SMSManager: вы можете получить ANR, поскольку Служба завершила задачу и выполнила ее в главном потоке пользовательского интерфейса. Если UI Main thread получил блок для более чем 5 секунд, система запустит ANR. Пожалуйста, проверьте и верните назад свое наблюдение.

общественных недействительный sendReplySMS (номер String, String responseText) {

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

}

+0

Спасибо. Я попробую. – androidBegginer

+0

В соответствии с журналами, которыми вы пользуетесь, вы получаете java.lang.IllegalArgumentException: Invalid destinationAddress. Возможно, вы не указали правильные значения для адреса назначения. –

+0

'onStarCommand' выполняется для активации сервиса, в этот момент' number' пуст, а responseText тоже пуст, поэтому сбой. любое решение? Благодарим за продвижение. – androidBegginer

0

Проверьте номер переменный в onStartCommand(); после того, как он будет правильно проверен, будет ли он инициализирован или нет, и если инициализирована проверка правильности номера телефона или нет

+0

'public String number =" ";' Я получаю номер из BroadcastReceiver в SMSMonitorService. – androidBegginer

+0

проверить действительный номер или не раз распечатать номер и проверить его ... – KomalG

+0

Хорошо, я попробую это. – androidBegginer