2012-10-10 280 views
1

從我的應用我試圖打開一個又一個,使用此代碼:打開一個應用程序從我的Android應用程序

package com.copag.lanceappli; 

import android.app.Activity; 
import android.content.ActivityNotFoundException; 
import android.content.ComponentName; 
import android.content.Intent; 


public class LanceAppli extends Activity { 


    public void LanceAppli() { 

      try 
      { 
       Intent intent = new Intent(Intent.ACTION_MAIN); 
       intent.addCategory("android.intent.category.LAUNCHER"); 
       intent.setComponent(new ComponentName("test.test.test","test.test.test.MainActivity")); 
       startActivity(intent); 
      } 
      catch(ActivityNotFoundException e) 
      { 
       e.printStackTrace(); 
      } 
      catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 

    } 
    public void main (String [] args) 
    { 
     LanceAppli(); 
    }  
} 

會發生什麼是應用crushs ......沒有錯誤消息。

這裏是我得到:

http://pastie.org/5030644

什麼想法?

+0

發佈堆棧跟蹤 – njzk2

+0

我沒有它,因爲我直接在平板電腦上部署,不使用模擬器 – cascadox

+0

,這與您部署的位置無關。連接平板電腦,將其設置爲啓用USB調試並獲取堆棧跟蹤。或者在模擬器上測試它。 – njzk2

回答

0

的問題是,我我試圖直接在構造函數上使用intent,正如David所說,所以我將它改爲:

package com.copag.lanceappli; 

import android.app.Activity; 
import android.content.ActivityNotFoundException; 
import android.content.ComponentName; 
import android.content.Intent; 
import android.os.Bundle; 

public class LanceAppli extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     try { 
      Intent intent = new Intent(Intent.ACTION_MAIN); 
      intent.addCategory("android.intent.category.LAUNCHER"); 
      intent.setComponent(new ComponentName("test.test.test","test.test.test.MainActivity")); 
      startActivity(intent); 
     } catch(ActivityNotFoundException e) { 
      e.printStackTrace(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

因此,我把代碼放入onCreate,因爲它應該是這樣,它的工作原理!

0

嘗試這樣的事情,併發布堆棧跟蹤,如果你得到一個。

try 
{ 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.addCategory("android.intent.category.LAUNCHER"); 
    intent.setComponent(new ComponentName("test.test.test","test.test.test.MainActivity")); 
    startActivity(intent); 
} 
catch(ActivityNotFoundException e) 
{ 
     e.printStackTrace(); 
} 
catch(Exception e) 
{ 
     e.printStackTrace(); 
} 
+0

謝謝,但我得到的是:應用程序LanceApplication(process com.copag.LanceAppli)已經停滯不前。請再試一次 – cascadox

+0

您是否有任何登錄DDMS的東西?這可能是應用程序無法啓動的其他原因。 – ScouseChris

2

如果指定組件,則表示您使用明確的意圖。你不應該在這種情況下指定類別。儘量簡單:

public void LanceAppli() 
{ 
    Intent intent = new Intent(Intent.ACTION_MAIN); 
    intent.setComponent(new ComponentName("test.test.test","test.test.test.MainActivity")); 
    startActivity(intent); 
} 

如果你需要運行啓動意圖則最好是使用下面的代碼:

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address"); 
startActivity(launchIntent); 
+0

同樣的事情應用程序只是粉碎... – cascadox

+0

你可以嘗試第二種方法嗎?此外,您嘗試調用的活動可能無法調用(因爲它未導出)。如果你可以用第二種方法運行應用程序,那麼問題在於你指定了軟件包名稱和/或活動。 – Yury

+0

我從目標應用程序清單文件中獲得了軟件包名稱,所以我不認爲它是錯誤的 – cascadox

1

有您已經發布了一些東西的代碼破:

您的類LanceAppli延伸Activity並且您正試圖在構造函數中執行代碼。不要這樣做。活動由Android OS進行實例化和控制。你不能自己實例化它們。

另外,您不應該爲活動提供構造函數。在任何情況下,當構造函數被調用時,活動還沒有被正確初始化(即:Context還沒有設置,這意味着你不能做任何需要Context的任何事情,在你的情況下你打電話startActivity()(它需要Context)在構造函數中。

此外,什麼是你正在嘗試啓動應用程序的名稱?這是應用程序中的主屏幕更換或定期Android應用?

相關問題