我有一项服务,其中包括从互联网上下载图片。完成后,我想在具有对话框主题的自定义Activity中显示此图像。但是我只想在应用程序运行时使用此弹出窗口,否则我只想创建通知。
但是当我尝试从我的服务开始一项活动时,我得到一个例外,我觉得这可能不是正确的方法吗?
它说:
android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
所以我的问题是,如果这是通过设置该标志来实现此目的的正确方法,或者我应该如何将我下载的图像从我的服务转移到活动。我能以某种方式告诉活动从我的服务类开始一个新活动吗?
答案 0 :(得分:3)
我认为使用广播接收器对你来说是更好的选择。
在服务中添加以下方法,并在图像下载完成时调用此方法。
private void updateMyActivity(Context context) {
if(MainActivity.activityStatusFlag){
//update the activity if activityStatusFlag=true;
Intent intent = new Intent("mUpdateActivity");
context.sendBroadcast(intent);
}else{
//display notification if activityStatusFlag=false;
}
}
在活动中添加以下代码。
public class MainActivity extends Activity{
public static boolean activityStatusFlag= false;
//define this variable to check if activity is running or not.
@Override
protected void onResume() {
super.onResume();
activityStatusFlag = true;
this.getApplicationContext().
registerReceiver(mMessageReceiver,new IntentFilter("mUpdateActivity"));
}
@Override
protected void onPause() {
super.onPause();
activityStatusFlag = false;
this.getApplicationContext().unregisterReceiver(mMessageReceiver);
}
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
//Display Popup or update Activity
}
};
}