当前位置: 代码迷 >> Android >> Android - 显示Intent与隐式Intent的应用
  详细解决方案

Android - 显示Intent与隐式Intent的应用

热度:33   发布时间:2016-04-28 01:27:14.0
Android -- 显示Intent与隐式Intent的应用

前面的博客我们见到过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>
  相关解决方案