前面的博客我们见到过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>