有什么办法在service中获取onActivityResult
时间: 2024-04-30 14:20:46 浏览: 12
在Service中无法直接获取 onActivityResult。因为 onActivityResult 是在 Activity 中被调用的,而 Service 是没有 onActivityResult 方法的。但是你可以通过 BroadcastReceiver 来实现在 Service 中接收到 onActivityResult 的结果。
具体步骤如下:
1. 在 Activity 中注册一个 BroadcastReceiver,并在 onActivityResult 方法中发送广播,将 onActivityResult 的结果传递给 BroadcastReceiver。
2. 在 Service 中注册同一个 BroadcastReceiver,并在 onReceive 方法中获取传递过来的 onActivityResult 的结果。
示例代码如下:
在 Activity 中:
```java
public class MyActivity extends Activity {
private BroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int resultCode = intent.getIntExtra("resultCode", RESULT_CANCELED);
Intent data = intent.getParcelableExtra("data");
// 在这里处理 onActivityResult 的结果
}
};
IntentFilter filter = new IntentFilter("MyActivity");
registerReceiver(receiver, filter);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Intent intent = new Intent("MyActivity");
intent.putExtra("resultCode", resultCode);
intent.putExtra("data", data);
sendBroadcast(intent);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
}
```
在 Service 中:
```java
public class MyService extends Service {
private BroadcastReceiver receiver;
@Override
public void onCreate() {
super.onCreate();
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
int resultCode = intent.getIntExtra("resultCode", RESULT_CANCELED);
Intent data = intent.getParcelableExtra("data");
// 在这里处理 onActivityResult 的结果
}
};
IntentFilter filter = new IntentFilter("MyActivity");
registerReceiver(receiver, filter);
}
@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
// ...
}
```
需要注意的是,在发送广播时,IntentFilter 的 action 要与 BroadcastReceiver 的 action 相同,这样才能接收到对应的广播。而且,在处理 onActivityResult 的结果时,要根据 requestCode 判断是哪个 startActivityForResult 的结果。