2016-07-27 45 views
0

這很奇怪 - 我試圖以編程方式打開另一個應用程序。 我發現這個鏈接,我遵循:Stackoverflow link在Android Studio中進行調試,意圖只在我有斷點後運行

所以我的代碼如下 - 注意它正在對話框中運行。

Intent intentToResolve = new Intent(Intent.ACTION_MAIN); 
intentToResolve.addCategory(Intent.CATEGORY_HOME); 
intentToResolve.setPackage("com.android.launcher3"); 
intentToResolve.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 
ResolveInfo ri = getPackageManager().resolveActivity(intentToResolve, 0); 
if (ri != null) 
{ 
    Intent intent = new Intent(intentToResolve); 
    intent.setClassName(ri.activityInfo.applicationInfo.packageName, ri.activityInfo.name); 
    intent.setAction(Intent.ACTION_MAIN); 
    intent.addCategory(Intent.CATEGORY_HOME); 
    startActivity(intent); 
} 

這似乎只是「關閉」我的應用程序,並轉到主屏幕,如果我在代碼中放置斷點。如果我讓它沒有斷點運行,那麼沒有任何反應。

我不知道爲什麼會這樣做?有任何想法嗎? 謝謝。

編輯:我已經上傳了它發生在YouTube的視頻,所以你可以看到我的意思。 您會看到我第一次運行它時,它會觸及斷點並且設備會進入主屏幕。 第二次運行它時,我已經移除了斷點,沒有任何反應。 YouTube link

+0

你的意思是「接近」爲「逼近」?你的應用崩潰了嗎? – SripadRaj

+0

不,我的意思是將其他應用程序(恰好是啓動程序)帶到前面。所以基本上我的應用程序進入後臺並顯示桌面。 – Mudders

回答

1

如果你設置一個斷點,它的工作原理似乎表明存在某種時序問題。

您提到您從對話框中運行此代碼,對我來說,這強化了您有計時問題的想法。

嘗試在關閉對話框後從Activity運行此代碼。 如果這不能解決問題,我會很驚訝。

我假設你正在使用對話框讓用戶選擇要啓動的內容。 因此,不要試圖從對話框中啓動其他應用程序,而是將該信息傳遞給它的父級活動,並在對話框關閉後讓該活動運行此代碼。

當您顯示對話框時,您正在從一個活動中執行 - 對話框顯示在您的活動之上。

您可能正在使用Dialog Builder構建對話框,然後調用builder.create()以顯示該對話框。

在構建器的代碼,你可能做這樣的事情:

.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int id) { 
        // User clicked OK 
       } 
      }) 

在onclick處理程序,第二個參數是用戶點擊該項目的ID。使用此信息來決定要啓動的內容。我會在Activity中建議一個單獨的方法來啓動,然後從onClick處理程序中調用它。

+0

嗨GreyBeardGeek - 我認爲你是對的。我將如何去發送調用主要活動來運行代碼來啓動一個不同的應用程序?小菜一點 - 對不起。 – Mudders

+0

我添加了一些關於這個信息到我的答案。 – GreyBeardedGeek

0

首先要確保你的應用程序屬於ri.activityInfo.applicationInfo.packageName packagename。代碼看起來不錯,問題是你的包名和內部類setClassName()

+0

我使用下面的代碼來獲取包名: PackageManager pm; pm = getPackageManager(); List packages = pm.getInstalledApplications(0); – Mudders

相關問題