gpt4 book ai didi

java - AsyncTask 是一个内部类 : get onPostExecute() result in Service

转载 作者:行者123 更新时间:2023-11-30 11:10:19 25 4
gpt4 key购买 nike

如果我的问题与其他问题类似,请问我还没有得到解决方案。

我有两个类,MainActivity 和 SMSMonitorService。

AsyncTask 是 MainActivity 的内部类。

我想获取 onPostExecute 结果并通过短信发送。方法 sendReplySMS 在 SMSMonitorService 上。

主 Activity .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

}
}

短信监控服务.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 类,因此您需要使用 startService 方法来启动发送短信的服务。这样做:

onPostExecute 方法中准备用于将所有值发送到 SMSMonitorService 的 Intent:

@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

关于java - AsyncTask 是一个内部类 : get onPostExecute() result in Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27728137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com