2013-02-14 49 views
1

這是我的問題。我正在開發從服務器加載一些文檔的應用程序。我通過Intent.ACTION_VIEW在另一個應用程序中打開文檔。這一切都工作得很好。問題在於整個應用程序受到引腳保護,因此我必須捕獲事件,例如「發送到後臺」或「屏幕鎖定」,以便隨後調出引腳屏幕,而當另一個應用程序在我的上方打開時,這不起作用。因此,如果用戶打開文檔,然後按主頁按鈕,從菜單上單擊我的啓動圖標,然後他再次獲得外部應用程序與打開的文檔和後退按鈕再次訪問我的應用程序。這是需要解決的安全問題。 下面是一些代碼片段:Android:如何關閉從我的應用程序打開的應用程序,當所有發送到背景


打開文件:

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_VIEW); 

Uri uri = Uri.fromFile(downloadedFile); 
String mimeType = document.getMimeType(); 
intent.setDataAndType(uri, mimeType); 
startActivityForResult(intent, 1); 

捕獲發送到後臺:

 ActivityManager am = (ActivityManager) context 
      .getSystemService(Context.ACTIVITY_SERVICE); 
    List<RunningTaskInfo> tasks = am.getRunningTasks(1); 
    if (!tasks.isEmpty()) { 
     ComponentName topActivity = tasks.get(0).topActivity; 
     if (!topActivity.getPackageName().equals(context.getPackageName())) { 
      IN_BACKGROUND = true; 
      Log.i(PinUtil.class.getSimpleName(), "App sent to background "); 
     } else { 
      IN_BACKGROUND = false; 
     } 
    } 

我的問題是:是否有可能檢測是否我的應用程序發送當另一個應用程序打開時的背景?按下我的啓動器圖標時如何不打開另一個應用程序。

感謝您的回覆。 問候 Lubos

回答

1

爲了解決這個問題:

所以,如果用戶打開文檔,然後按home鍵,點擊我的推出從菜單 圖標,然後他會用打開的文檔 又一次外部應用程序用後退按鈕再次訪問我的應用程序。這是 需要修復的安全問題。下面是一些代碼片段:

你需要確保的是,當你啓動一個外部應用程序供用戶查看文檔時,外部應用程序不會運行在同一個任務,你的應用程序。它需要運行一個新的,單獨的任務。你可以這樣做是這樣的:

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_VIEW); 
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // Ensure app runs in separate task 
Uri uri = Uri.fromFile(downloadedFile); 
String mimeType = document.getMimeType(); 
intent.setDataAndType(uri, mimeType); 
startActivity(intent); // Can't use startActivityForResult() here 

但是,您不能使用startActivityForResult()當您啓動外部瀏覽器,因爲在其它任務中運行的活動可以導致不能返還給您。但是,大多數外部應用程序無論如何都不會返回結果ACTION_VIEW,所以它可能不是問題。

然後你問這個:

我的問題是:是否有可能,如果另一個應用程序打開時,我的應用程序發送到 背景來檢測?當我按下啓動器圖標時如何不打開另一個應用程序 。

StackOverflow應該有一些答案,可以幫助您確定您的應用程序是否在後臺(它確實不是那麼容易確定這一點)。

我上面的解釋應該回答你的第二個問題。如果您在任務中未啓動其他應用程序,則只有您的應用程序會在按下啓動器圖標時啓動。

相關問題