Запуск мероприятий из разных пакетов

У меня есть активность A в пакете 1, и я хочу запустить намерение, которое будет активировать действие B, которое находится в пакете 2.

Как я могу это сделать? Любые образцы будут приветствоваться.

это то, что я сделал, и ошибка, которую я получаю:

первая активность ( "MainActivity" ) в пакете: com.abelski.currencyclient и второе действие ( "SecondActivity" в другом пакете: com.idan.second

теперь я хочу позвонить из MainActivity в SecondActivity.

ive добавила эту строку в манифест MainActivity:

 <activity android:name="com.idan.second.SecondApplicationActivity"></activity>

теперь в главной операции. Я получил эту кнопку, которая запускает эту строку:

Intent intent = new Intent(MainActivity.this,SecondApplicationActivity.class); 

и это rror:

04-29 09:20:59.197: ERROR/AndroidRuntime(399): Uncaught handler: thread main exiting due to uncaught exception
04-29 09:20:59.276: ERROR/AndroidRuntime(399): java.lang.NoClassDefFoundError: com.idan.second.SecondApplicationActivity
04-29 09:20:59.276: ERROR/AndroidRuntime(399):     

Ответы

Ответ 1

Я предполагаю, что под "пакетами" вы подразумеваете приложения.

У нас есть: - ApplicationA с FirstActivity - ApplicationB с SecondActivity

Если в файле ApplicationB AndroidManifest.xml в объявлении SecondActivity вы добавляете фильтр намерений, например:

<activity android:name=".SecondActivity">
  <intent-filter>
    <action android:name="applicationB.intent.action.Launch" />
    <category android:name="android.intent.category.DEFAULT" />
  </intent-filter>
</activity>

Вы можете создать намерение запустить этот SecondActivity из FirstActivity с помощью:

Intent intent = new Intent("applicationB.intent.action.Launch");
startActivity(intent);

Что все это значит:

  • В SecondActivity есть фильтр для действия намерения "applicationB.intent.action.Launch"
  • Когда вы создаете намерение с этим действием и вызываете "startActivity", система найдет действие (если оно есть), которое отвечает на него

Документация для этого: https://developer.android.com/reference/android/content/Intent.html

Ответ 2

У меня была та же проблема, и решение было еще одним уровнем в корне вашего имени пакета.

Если у вас есть два пакета "com.first..." и "com.second...", а манифест ссылается на "com.first". Затем вы можете реорганизовать оба пакета, чтобы повторно использовать первую часть. Например, "com.package.first" и "com.package.second". Затем ваш манифест должен быть также обновлен

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.package">
...

    <activity android:name=".first.FirstPackageActivity" android:label="FirstPackageActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>
    <activity android:name=".second.SecondPackageActivity" android:label="SecondPackageActivity">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.LAUNCHER"/>
        </intent-filter>
    </activity>

Ваш код Java может создать намерение и начать работу обычным способом:

Intent intent = new Intent(this,ActivityClassName.class);
startActivity(intent);

Ответ 4

Используйте явные намерения:

Intent intent = new Intent(context,ClassName.class);

где ClassName из другого пакета.

Иногда вы не будете знать имя класса в таких случаях, вам придется полагаться на намерение, которое рекламирует целевой класс.