Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to start an activity in another module explicitly

I created an aar and i added it to my project as an module. in this module i have a HelloWorldActivity that i want to run.

my module manifest looks like this.

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

Now i can start this activity from my project using this code

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

but as you can see this code is implicit and problem with implicit calling is that if i use this module in more than one app, both installed on user device it will show an app chooser dialog to user. So how can make this call explicit, preventing user from switching app?

this code will not run since HelloWorldActivity is not in the same package as calling activity

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

I really don't want to change my module for each project that uses it.

like image 894
Alireza A. Ahmadi Avatar asked Oct 30 '15 06:10

Alireza A. Ahmadi


People also ask

How do I start an activity in another module?

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

Which function can be used to start another activity?

1.2. To start an activity, use the method startActivity(intent) . This method is defined on the Context object which Activity extends. The following code demonstrates how you can start another activity via an intent. # Start the activity connect to the # specified class Intent i = new Intent(this, ActivityTwo.

How do I run a specific activity?

Go to "Edit Configurations..." in the "Run" menu. In the left pane, select your application. In the right pane, in the "General" tab, in the "Launch Options" section, there is a "Launch:" dropdown. Select "Specified Activity", and enter the name of your activity as it appears in your Manifest.


1 Answers

You can use the Class.forName(), it worked for me when i was needed to start activity which is in another module in my project.

 Intent intent = null;     try {         intent = new Intent(this,             Class.forName("ir.sibvas.testlibary1.HelloWorldActivity"));         startActivity(intent);     } catch (ClassNotFoundException e) {         e.printStackTrace();     } 
like image 124
Moti Bartov Avatar answered Sep 17 '22 13:09

Moti Bartov