Явное намерение Android с целевым компонентом

Возможно ли запустить явное намерение, но не для активности из моего проекта, а для активности в каком-либо другом приложении.

Я уверен в этом коде, и я знаю, что он работает

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).
Подумайте, что я разработал два приложения app1 и app2 app1 pkg name is com.xyz.app1 & app2 pkg name is 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, и если вы знаете его имя пакета и имя класса.

Да, возможно, вы можете вызвать другое действие другого пакета, подобного этому.

См. Подробности здесь

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

Я предлагаю объединить имя пакета и класса с точкой;

Это ускоряет копирование и вставку, например. При написании тестов jUnit.

 String packageName = getApplicationContext().getPackageName(); String className = "SomeActivity"; Intent intent = new Intent(); intent.setComponent(new ComponentName(packageName, packageName + "." + className)); startActivity(intent);