前面的博客我们见到过Intent,我们通过他来指定activity之间的跳转,及数据的传递。
下面我们来了解下Intent,Intent在我们的应用中分为显示和隐式两种方式。
显示Intent
见下面这段程序
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub startActivity(new Intent(MainActivity.this, BMainActivity.class)); } }); }
看完是不是感觉很熟悉,这里的Intent(MainActivity.this, BMainActivity.class)就是显示Intent的用法,直接指定从哪跳转到哪。
隐式Activity
隐式的Activity正如名字一样,一些信息是隐秘的,我们来看看AndroidManifest.xml这个配置文件,它是用于捆绑Activity和视图的配置文件,就像jsp servlet一样。
1、我们来看下他的配置
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.intent" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".BMainActivity" android:label="@string/title_activity_bmain" > <intent-filter > <category android:name="android.intent.category.DEFAULT"/> <action android:name="com.example.intent.BMainActivity" /> </intent-filter> </activity> </application></manifest>
注意看 30 和 31行,是我新加的两行代码
<intent-filter > <category android:name="android.intent.category.DEFAULT"/> <action android:name="com.example.intent.BMainActivity" /></intent-filter>
category android:name=”android.intent.category.DEFAULT”指定Intent跳转的方式为默认,默认为Activity间的跳转。
action android:name=”com.example.intent.BMainActivity”,指定Activity的名字(别名)
2、我们来看看代码是怎么样隐式表达的。
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub startActivity(new Intent("com.example.intent.BMainActivity")); } }); }
new Intent(“com.example.intent.BMainActivity”),直接用在AndroidManifest.xml定义的别名来进行activity之间的跳转。
3、这么用有个优点,就是可以跨应用跳转,就是我可以从一个baidu应用,跳转到一个QQ音乐应用的Activity里,瞬间感觉这个隐式Intent不错吧。我们经常在应用中见到。
所以有一点指的我们注意,那就是配置文件中,别名的命名规则,采取应用包名+activity名保证唯一。
4、如果我们不想对其他应用开放某个activity,那么通过配置接口实现。activity配置中增加android:exported=”false”,默认为true。
<activity android:name=".BMainActivity" android:label="@string/title_activity_bmain" android:exported="false" > <intent-filter > <category android:name="android.intent.category.DEFAULT"/> <action android:name="com.example.intent.BMainActivity" /> </intent-filter> </activity>