AsyncTask 是一个内部 class: get onPostExecute() result in Service
AsyncTask is an inner class: get onPostExecute() result in Service
如果我的问题与其他问题类似,请问我还没有得到解决方案。
我有两个 classes,MainActivity 和 SMSMonitorService。
AsyncTask 是 MainActivity 的内部 class。
我想获取 onPostExecute 结果并通过短信发送。方法 sendReplySMS 在 SMSMonitorService 上。
MainActivity.java
public class MainActivity extends ActionBarActivity {
//some 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);
SMSMonitorService.sendReplySMS(SMSMonitorService.number, finalResponse); //sendReplySMS and number are declared static
}
}
SMSMonitorService.java
public class SMSMonitorService extends Service {
//some code...
public static void sendReplySMS(String number, String responseText) {
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, responseText, null, null);
}
//some code..
短信从不发送。
如何发送包含 onPostExecute 结果的短信?
非常感谢您的帮助。
SMSMonitorService
不是普通的 java class 服务,因此您需要使用 startService
方法启动发送短信的服务。这样做:
在 onPostExecute
方法中准备 Intent 以将所有值发送到 SMSMonitorService
:
@Override
protected void onPostExecute(String result) {
//....your code
Intent intent = new Intent(CurrentActivity.this,SMSMonitorService.class);
intent.putExtra("finalResponse", finalResponse);
startService(intent);
}
并在SMSMonitorService
服务中使用
@Override
public int onStartCommand( Intent intent , int flags , int startId )
{
super.onStartCommand(intent, flags , startId);
String finalResponse = intent.getStringExtra("finalResponse");
if( extras != null )
sendReplySMS(SMSMonitorService.number, finalResponse);
return START_REDELIVER_INTENT;
}
确保您已在 AndroidManifest.xml
中添加 SMSMonitorService
服务
注意: 使用 IntentService
而不是 Service,因为 IntentService 在任务完成时自行停止。有关详细信息,请参阅 IntentService
如果我的问题与其他问题类似,请问我还没有得到解决方案。
我有两个 classes,MainActivity 和 SMSMonitorService。
AsyncTask 是 MainActivity 的内部 class。
我想获取 onPostExecute 结果并通过短信发送。方法 sendReplySMS 在 SMSMonitorService 上。
MainActivity.java
public class MainActivity extends ActionBarActivity {
//some 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);
SMSMonitorService.sendReplySMS(SMSMonitorService.number, finalResponse); //sendReplySMS and number are declared static
}
}
SMSMonitorService.java
public class SMSMonitorService extends Service {
//some code...
public static void sendReplySMS(String number, String responseText) {
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, responseText, null, null);
}
//some code..
短信从不发送。
如何发送包含 onPostExecute 结果的短信?
非常感谢您的帮助。
SMSMonitorService
不是普通的 java class 服务,因此您需要使用 startService
方法启动发送短信的服务。这样做:
在 onPostExecute
方法中准备 Intent 以将所有值发送到 SMSMonitorService
:
@Override
protected void onPostExecute(String result) {
//....your code
Intent intent = new Intent(CurrentActivity.this,SMSMonitorService.class);
intent.putExtra("finalResponse", finalResponse);
startService(intent);
}
并在SMSMonitorService
服务中使用
@Override
public int onStartCommand( Intent intent , int flags , int startId )
{
super.onStartCommand(intent, flags , startId);
String finalResponse = intent.getStringExtra("finalResponse");
if( extras != null )
sendReplySMS(SMSMonitorService.number, finalResponse);
return START_REDELIVER_INTENT;
}
确保您已在 AndroidManifest.xml
SMSMonitorService
服务
注意: 使用 IntentService
而不是 Service,因为 IntentService 在任务完成时自行停止。有关详细信息,请参阅 IntentService