我正在开始一个新的Service
来下载Activity
中的数据库文件,Fragment
内部还有Activity
使用下载数据库中的数据文件以设置其布局。那么,有没有办法或方法知道IntentService
已完成下载,然后我可以将Fragment
附加到Activity
。
Intent intent = new Intent(StartActivity.this, DownloadService.class);
startService(intent);
getSupportFragmentManager().beginTransaction().replace(R.id.startContainer,new ChartFragment()).commit();
答案 0 :(得分:1)
在您的活动中注册一个类似于:
的BroadcastReceiverfunction Redirect() {
if ('@Html.Raw(Model)'.indexOf(window.location.protocol) != -1) {
window.location.href = '@Html.Raw(Model)';
} else {
var origin = window.location.origin || (window.location.protocol + '//' + window.location.host);
window.location.href = origin + '@Html.Raw(Model)';
}
}
setTimeout('Redirect()', 10);
然后在您的服务中发送广播:
BroadcastReceiver myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// do my stuff
}
};
registerReceiver(myReceiver , new IntentFilter("com.myapp.DOWNLOADCOMPLETE"));
如果你需要传递一些值,你也可以在你的意图上加上。(/ p>)
可以找到关于Android服务和后台处理的Google搜索教程here。
答案 1 :(得分:0)
有一些方法可以通过服务通知用户界面。
如果你不确定每一个是什么,你可以从BroadcastReceiver开始。这是Android提供的标准方式。
这是一个如何使用它的简单示例。您的服务将如下所示:
public class YourService extends IntentService {
public YourService() {
super("YourService");
}
@Override
protected void onHandleIntent(Intent intent) {
//your process..
//process done
Intent broadcastIntent = new Intent("Your filter");
broadcastIntent.putExtra("param you want to pass", "value");
LocalBroadcastManager.getInstance(this).sendBroadcast(broadcastIntent);
}
}
以下是您的活动
public class YourActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(YourActivity.this, YourService.class);
startService(intent);
}
BroadcastReceiver yourBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//do something
Log.d(YourActivity.class.getSimpleName(), "broadcast receiver called");
}
};
@Override
protected void onStart() {
LocalBroadcastManager.getInstance(this).registerReceiver(yourBroadcastReceiver, new IntentFilter("Your filter"));
super.onStart();
}
@Override
protected void onStop() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(yourBroadcastReceiver);
super.onStop();
}
}
我在这里使用LocalBroadcastManager,因为它更有效,更安全
答案 2 :(得分:0)
使用BroadcastReceiver
。正如@HendraWD在他的回答中所述,还有许多其他方式可以获得有关下载的通知,您可以尝试BroadcastReceiver
。
因此,在Activity
内部创建BroadcastReceiver
就像这样。
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
// Launch your Fragment here
}
};
检查onReceive
的{{1}}功能。如果您注册BroadcastReceiver
,则在下载完成后将调用onReceive
函数,然后正确通知。我在这里添加一些代码示例。
在BroadcastReceiver
的{{1}}功能中,首先注册onCreate
。
Activity
现在在BroadcastReceiver
registerReceiver(mReceiver, new IntentFilter("DOWNLOAD_COMPLETE"));
函数中取消注册接收器。
onDestroy
现在,从您开始的Activity
开始,下载完成后,您可能需要通知您@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
}
。所以,您需要像这样发送Service
广播。
Activity
希望有所帮助。