2014-10-07 152 views
0

我有一項服務,其中包括從互聯網下載圖像。完成此操作後,我想在具有對話主題的自定義活動中顯示此圖像。但是我只想在應用程序運行時使用此彈出窗口,否則我只想創建通知。Android:如何告訴我的活動從我的服務開始新的活動?

但是,當我嘗試從我的服務開始活動時,我收到一個異常,我覺得這可能不是正確的方法嗎?

它說:

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

i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); – 2014-10-07 13:32:21

+0

@NaveenTamrakar這是我想要完成的最好的解決方案嗎? – Danjoa 2014-10-07 14:01:15

回答

3

我認爲使用Broadcast Receiver是更好的選擇。

在服務中添加以下方法,並在圖像下載完成時調用此方法。

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 
     } 
    }; 
} 
+0

這是我認爲應該如此。謝謝!我添加了intent.putExtra();在updateMyActivity()方法中,然後從broadcastreceiver的onRecieve()中獲取它。工作出色! – Danjoa 2014-10-08 11:40:18

相關問題