Android:如何告诉我的活动从我的服务开始新活动?

时间:2014-10-07 13:29:34

标签: java android android-activity android-service downloading

我有一项服务,其中包括从互联网上下载图片。完成后,我想在具有对话框主题的自定义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?

所以我的问题是,如果这是通过设置该标志来实现此目的的正确方法,或者我应该如何将我下载的图像从我的服务转移到活动。我能以某种方式告诉活动从我的服务类开始一个新活动吗?

1 个答案:

答案 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
        }
    };
}