2012-10-10 55 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应用?

相关问题