1

从我的应用程序中,我正在尝试使用以下代码打开另一个应用程序:

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();
   }    
}

发生的事情是应用程序崩溃......没有错误消息。

这是我得到的:

http://pastie.org/5030644

有任何想法吗?

4

4 回答 4

2

如果您指定组件,这意味着您使用显式意图。您不应该在这种情况下指定类别。尝试简单:

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

如果您需要运行 Launcher Intent,那么最好使用以下代码:

Intent launchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address");
startActivity(launchIntent);
于 2012-10-10T10:44:30.870 回答
1

您发布的代码有很多问题:

您的类LanceAppli扩展Activity并且您正在尝试在构造函数中执行代码。不要这样做。活动由 Android 操作系统实例化和控制。你不能自己实例化它们。

此外,您永远不应该为活动提供构造函数。无论如何,当调用构造函数时,活动尚未正确初始化(即:Context尚未设置。这意味着您不能做任何需要 a 的事情Context。在您的情况下,您正在调用startActivity()(需要 a Context)在构造函数中。

另外,您尝试启动的应用程序的名称是什么?此应用程序是主屏幕替代品还是常规 Android 应用程序?

于 2012-10-10T21:57:18.733 回答
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();
}
于 2012-10-10T10:35:39.937 回答
0

问题是我试图intent像大卫所说的那样直接在构造函数上使用。所以我把它改成了:

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按原样放入,并且可以正常工作!

于 2012-10-11T08:43:09.517 回答