gpt4 book ai didi

android - 将 Intent 从服务发送到 Activity

转载 作者:IT王子 更新时间:2023-10-28 23:28:09 28 4
gpt4 key购买 nike

我正在尝试使用 Intent 将 IntentSerivce 的结果返回到 mainactivity,但我无法让它工作。IntentService 毫无问题地从 Activity 接收 Intent,完成它并获得一个 JSONstring。现在剩下的唯一问题就是将此字符串发送回 Activity 。

这是mainactivity中的方法:

public String RTConn(String query){
System.out.println("Querying Rotten Tomatoes.");
Intent rtIntent = new Intent(MainActivity.this, RTConnection.class);
rtIntent.putExtra("query", query);
bindService(rtIntent, RTConnection, Context.BIND_AUTO_CREATE);
startService(rtIntent);
String json = getIntent().getStringExtra("json");
return json;

这里是 IntentService:

public void onStart(Intent intent, int startId){
System.out.println("intent Received");
String jsonString = rottenTomatoesSearch(intent.getStringExtra("query"));
Intent RTRetur = new Intent(RTConnection.this, MainActivity.class);
RTRetur.putExtra("json", jsonString);
startActivity(RTRetur);
}

显然 startActivity 不起作用,但还有什么可以使用的? (我宁愿不使用广播接收器)。问候彼得 L。

更新

这是 MainActivity 的外观:

public static final String RECEIVE_JSON = "student.kau.RECEIVE_JSON";
private BroadcastReceiver RTReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("broadcast Received: "+intent.getAction());
if(intent.getAction().equals(RECEIVE_JSON)){
System.out.println("JSON Received.");
String serviceJsonString = intent.getStringExtra("json");
}
}
};

这段代码是onCreate:

LocalBroadcastManager bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVE_JSON);
bManager.registerReceiver(RTReceiver, intentFilter);

这是方法:

public void onStart(Intent intent, int startId){
System.out.println("intent Received");
String query = intent.getStringExtra("query");
String jsonString = rottenTomatoesSearch(query);
System.out.println("Fetching done");
Intent RTRetur = new Intent(MainActivity.RECEIVE_JSON);
System.out.println("action: "+RTRetur.getAction());
RTRetur.putExtra("json", jsonString);
sendBroadcast(RTRetur);

}

logcat 中的最后一个跟踪是 System.out.println("action: "+RTRetur.getAction()");

-action: 

student.kau.RECEIVE_JSON

最佳答案

为此,您可以使用 BroadcastReceiver在您的 Activity 中。

Here is a great example I use使用 BroadcastReceiversService <> Activity 之间持续通信。

Here is another great example Service <> Activity 之间的通信。它使用 MessengerIncomingHandler

广播接收器

我会为你的情况做一个简单的例子。

这是您的 Activity 的 BroadcastReceiver。它将收到您的字符串:

//Your activity will respond to this action String
public static final String RECEIVE_JSON = "com.your.package.RECEIVE_JSON";

private BroadcastReceiver bReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getAction().equals(RECEIVE_JSON)) {
String serviceJsonString = intent.getStringExtra("json");
//Do something with the string
}
}
};
LocalBroadcastManager bManager;

在你的 onCreate() 的 Activity 中

bManager = LocalBroadcastManager.getInstance(this);
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(RECEIVE_JSON);
bManager.registerReceiver(bReceiver, intentFilter);

在 Activity 的 onDestroy() 中,确保取消注册广播接收器。

bManager.unregisterReceiver(bReceiver);

最后,在您的 Service onStart() 中,执行以下操作:

System.out.println("intent Received");
String jsonString = rottenTomatoesSearch(intent.getStringExtra("query"));
Intent RTReturn = new Intent(YourActivity.RECEIVE_JSON);
RTReturn.putExtra("json", jsonString);
LocalBroadcastManager.getInstance(this).sendBroadcast(RTReturn);

您的 Activity 将额外收到带有该 json 的 Intent

关于android - 将 Intent 从服务发送到 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12997463/

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