Подтвердить что ты не робот

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

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

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

Intent i=new Intent(this,MyActivity.class);

Но можно ли сделать что-то вроде этого

Intent i=new Intent(this,com.bzz.bla.bla.SomeActivity.class);

Я имею в виду то, что является точным способом явного запуска активности из другого приложения (активность, которая содержится в других apk), возможно ли это вообще?

Я пробовал, но он меня закрыл, чтобы закрыть сообщение...: (

4b9b3361

Ответ 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);