2015-10-30 13 views
6

Stworzyłem aar i dodałem go do mojego projektu jako moduł. w tym module mam HelloWorldActivity, który chcę uruchomić.jak rozpocząć działalność w innym module jawnie

Mój manifest modułu wygląda następująco.

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="ir.sibvas.testlibary1.HelloWorldActivity" 
     android:label="@string/app_name" > 

     <intent-filter> 
      <action android:name="ir.sibvas.testlibary1.HelloWorldActivity" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".MainActivity" 
     android:label="@string/title_activity_main" > 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 


    </activity> 
</application> 

Teraz mogę rozpocząć tę działalność od mojego projektu przy użyciu tego kodu

Intent intent = new Intent("ir.sibvas.testlibary1.HelloWorldActivity"); 
startActivity(intent); 

ale jak widać ten kod jest niejawny i problem z niejawnego powołania jest to, że w przypadku korzystania z tego modułu w więcej niż jedna aplikacja, zainstalowana na urządzeniu użytkownika, pokaże użytkownikowi okno dialogowe wyboru aplikacji. W jaki sposób można wyraźnie określić to połączenie, uniemożliwiając użytkownikowi zmianę aplikacji?

ten kod nie będzie działał od HelloWorldActivity nie jest w tym samym opakowaniu jako wywołanie Aktywność

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

ja naprawdę nie chcę zmienić mój moduł dla każdego projektu, który go używa.

+0

Dostawca treści może ci pomóc. –

+0

Intencja intencji = nowa intencja (MainActivity.this, HelloWorldActivity.class); // użycie MainActivity.this zamiast tego –

Odpowiedz

-2

Jednoznaczne przypisanie:

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

powinien działać dobrze pod warunkiem, że zostały dodane import do HelloWorldActivity.class z pełną nazwą pakietu swojego modułu mianowicie. ir.sibvas.testlibary1.HelloWorldActivity

6

Możesz użyć Class.forName(), pracował dla mnie, gdy byłem potrzebny do rozpoczęcia działalności, która jest w innym module w moim projekcie.

Intent intent = null; 
    try { 
     intent = new Intent(this, 
      Class.forName("ir.sibvas.testlibary1.HelloWorldActivity")); 
     startActivity(intent); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 
+0

Uratowałem mój dzień ... –

Powiązane problemy