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

component を指定すると、これは明示的な意図を使用することを意味します。この場合、カテゴリを指定しないでください。簡単に試してください:

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 launchIntent = getPackageManager().getLaunchIntentForPackage("com.package.address");
startActivity(launchIntent);
于 2012-10-10T10:44:30.870 に答える
1

あなたが投稿したコードにはいくつかの壊れたものがあります:

クラスLanceAppliが拡張Activityされ、コンストラクターでコードを実行しようとしています。これをしないでください。アクティビティは Android OS によってインスタンス化され、制御されます。それらを自分でインスタンス化することはできません。

また、アクティビティにコンストラクターを提供するべきではありません。いずれにせよ、コンストラクターが呼び出されたとき、アクティビティはまだ適切に初期化されていません (つまり、Contextはまだセットアップされていません。これは、 を必要とすることは何もできないことを意味しますContext。コンストラクターで。startActivity()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 に答える