明示的なインテントを起動することは可能ですが、私のプロジェクトからのアクティビティではなく、他のアプリケーションでのアクティビティに対して実行できますか?.
私はこのコードを確信しており、実行されていることを知っています
Intent i=new Intent(this,MyActivity.class);
しかし、このようなことをすることは可能ですか?
Intent i=new Intent(this,com.bzz.bla.bla.SomeActivity.class);
他のアプリケーションからアクティビティを明示的に開始する正確な方法は何ですか(他のapkに含まれているアクティビティ)、これはまったく可能ですか?
試しましたが、強制終了メッセージが表示されます。
はい、可能です。しかし、意図の作成は異なります。これを試してください:
Intent intent = new Intent();
intent.setComponent(new ComponentName("The package name of the activity that you wish to launch","Its fully qualified class name"));
startActivityForResult(intent);
はい、可能です。しかし、意図の作成は少し異なります。
Intent intent = new Intent();
intent.setComponent(new ComponentName("The package name of the activity that you wish to launch","Its fully qualified class name"));
startActivity(intent);
ただし、ランダムアプリのアクティビティを呼び出すことはできません。その特定のアクティビティには、MAINアクションを持つインテントフィルターが必要です。
アクションまたはターゲットコンポーネント(pkg、cls)の名前のいずれかを知っている必要があるだけの目的で、任意のコンポーネントを起動できます。
2つのアプリを開発したと考えてくださいapp1&app2 app1パッケージ名はcom.xyz.app1&app2パッケージ名はcom.xyz.app2.
app1 2つのアクティビティがあるApp1MainActivity
&App1XyzActivity
、app2にはアクティビティが1つだけありますApp2MainActivity
app2 App2MainActivityからapp1の両方のアクティビティを開始したい
app2 App2MainActivity 2つのボタンb1とb2があり、クリックb1でApp1MainActivityを開始し、クリックb2で開始したいApp1XyzActivity
次に、App2MainActivity内のボタンb1およびb2のコードは
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i = new Intent();
String pkg = "com.xyz.app1";
String cls = "com.xyz.app1.App1MainActivity";
i.setComponent(new ComponentName(pkg, cls));
App2MainActivity.this.startActivity(i);
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i = new Intent();
String pkg = "com.xyz.app1";
String cls = "com.xyz.app1.App1XyzActivity";
i.setComponent(new ComponentName(pkg, cls));
App2MainActivity.this.startActivity(i);
}
});
ここで、アプリapp1とapp2の両方をインストールし、app2を実行します。
ボタンb1をクリックするとapp1 App1MainActivityが開始しますが、ボタンb2をクリックすると例外が発生するのは、パッケージ名とそのクラスを知っていても、別のアプリのアクティビティをランダムに開始できないためです。名前ですが、アクションMAINのインテントフィルターがあり、パッケージ名とクラス名がわかっている場合は、別のアプリのメインアクティビティを開始できます。
パッケージとクラス名をドットで連結することをお勧めします。
これにより、コピーと貼り付けが高速化されます。 jUnitテストの作成中。
String packageName = getApplicationContext().getPackageName();
String className = "SomeActivity";
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, packageName + "." + className));
startActivity(intent);
はい、可能です。このような別のパッケージの別のアクティビティを呼び出すことができます。
詳細 はこちらをご覧ください
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("np.birthday.com.order", "np.birthday.com.order.MainActivity");// intent.setClassName("Package NAme of another application", "np.birthday.com.order.MainActivity");
startActivity(intent);