Явное намерение Android с целевым компонентом
Можно ли запускать явное намерение, но не для активности из моего проекта, а для активности в каком-либо другом приложении.
Я уверен в этом коде, и я знаю, что он работает
Intent i=new Intent(this,MyActivity.class);
Но можно ли сделать что-то вроде этого
Intent i=new Intent(this,com.bzz.bla.bla.SomeActivity.class);
Я имею в виду то, что является точным способом явного запуска активности из другого приложения (активность, которая содержится в других apk),
возможно ли это вообще?
Я пробовал, но он меня закрыл, чтобы закрыть сообщение...: (
Ответы
Ответ 1
Да, это возможно. Но создание намерения различно. Пробуйте следующее:
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);
Ответ 2
Да, это возможно. Но создание намерений немного отличается.
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.
Ответ 3
Вы можете запустить любой компонент с помощью намерения только знать имя действия или целевого компонента (pkg, cls).
Подумайте, что я разработал два приложения app1 и app2 app1 pkg name: com.xyz.app1 и app2 pkg name com.xyz.app2.
app1, имеющий два действия App1MainActivity
и App1XyzActivity
, app2 имеет только одно действие App2MainActivity
, теперь я хочу начать как действие app1 из app2 App2MainActivity
app2 App2MainActivity имеют две кнопки b1 и b2 при щелчке b1. Я хочу запустить App1MainActivity и на клике b2. Я хочу запустить App1XyzActivity
, тогда код для кнопок b1 и b2 в App2MainActivity будет
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 и запускаю приложение2.
Когда я нажимаю на кнопку b1, запускается app1 App1MainActivity, но если я нажимаю кнопку b2, возникает исключение, мы можем не запускать случайным образом какую-либо деятельность другого приложения, даже если вы знаете имя пакета и его имя класса, но можете начать другое основное приложение приложения, если у него есть фильтр намерения с действием MAIN, и если вы знаете его имя пакета и имя класса.
Ответ 4
Да, возможно, вы можете вызвать другое действие другого пакета, как это.
Смотрите подробнее здесь
Ответ 5
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);
Ответ 6
Я бы предложил объединить пакет и имя класса с точкой;
это ускоряет копирование и вставку, например. при написании тестов jUnit.
String packageName = getApplicationContext().getPackageName();
String className = "SomeActivity";
Intent intent = new Intent();
intent.setComponent(new ComponentName(packageName, packageName + "." + className));
startActivity(intent);