有时我们需要在一个应用中跳到另外一个应用的指定界面,其实实现的方式很简单,跳转的情况有以下几种:
第一种:从一个应用跳到另一个应用的主activity。
ComponentName componentName = new ComponentName("com.example.tiaozhuan", "com.example.tiaozhuan.MainActivity"); Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("keystring", "shuju"); intent.putExtras(bundle); intent.setComponent(componentName); startActivity(intent);//组件名称,第一个参数是要跳转的 应用程序的包名 ,后一个是这个应用程序的主Activity所在的包名的位置。这两个包名也许是不一致的。
注意点:需要注意应用程序的包名以及应用程序的主Activity所在的包名是否正确,他们两个不一定一致,要跟你的应用的包名和activity名称一一对应。
第二种:从一个应用跳到另一个应用的非主activity,则需要action来指明。
ComponentName componentName = new ComponentName( "com.example.tiaozhuan", "com.example.tiaozhuan.TextActivity"); Intent intent = new Intent(); Bundle bundle = new Bundle(); bundle.putString("keystring", "shuju"); intent.putExtras(bundle); intent.putExtra("word", "helloworld"); intent.setAction("com.example.tiaozhuan.TextActivity"); intent.setComponent(componentName); startActivity(intent);
1.在A应用的activity中,指明action
第一个是应用程序的包名,第二个是activity所在的位置。 他们的包名也许不一样,一个是清单文件里面的入口的哪里的。一个是src文件下的包名哪里的。如果自己不做改变一般是一样的。
2.在B应用的配置文件中,给此activity加上intentFilter,两个标签分别是action和category,这个action的值跟A应用中activity中intent.setAction的内容一致。这样才能匹配。
<activity android:name="com.example.tiaozhuan.TextActivity" android:label="@string/app_name" android:screenOrientation="landscape" > <intent-filter> <action android:name="com.example.tiaozhuan.TextActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>注意点: B应用记得改变了清单文件,所以需要重新安装运行。
第三种:从一个应用跳到另一个应用的activity,或者在清单文件里面,在这个activity的标签里面加一句exported=true。那样就不同指明action了。
<activity android:name="com.example.tiaozhuan.TextActivity" android:label="@string/app_name" android:exported="true" android:screenOrientation="landscape" > <!-- <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> --> </activity>