Activity启动的两种方式

今天学习 Android 的 Intent 的使用

显示 Intent 就是指定 Activity。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.example.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btnStartMyAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this, MyAty.class));

            }
        });

    }
}

通过Intent直接指定一个Activity

创建一个Intent,但是并不指定启动的Activiy,有很多启动方式。

AndroidManiFest.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MyAty">
        <intent-filter>
            <category android:name="android.intent.category.DEFAULT"/>
            <action android:name="asdasd"/>
        </intent-filter>
        </activity>
    </application>

</manifest>

在AndroidManiFest.xml中配置文件,添加intent-filter标签,并添加一个字符串。

MainActivity.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package com.example.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btnStartMyAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
    //直接通过字符串启动
                startActivity(new Intent("asdasd"));
            }
        });

    }
}

注意 这里的字符串虽然可以说是任意格式,但是有一个约定俗成的规定 包名.intent.action.Action名


所以上述的asdasd我们应该命名为com.example.myapplication.intent.activity.MyAty 为了方便,我们不出错。 我们会在代码的前面的添加一个静态常量。

MyAty.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
package com.example.myapplication;

import android.app.Activity;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MyAty extends Activity {
    public static final String ACTION = "com.example.myapplication.intent.activity.MyAty";
    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my_aty);
    }
}

MainActivity.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package com.example.myapplication;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.btnStartMyAty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MyAty.ACTION));
            }
        });

    }
}

这样就很方便的使用,让我们不出错。

优势: 可以启动其他应用的页面,如在A应用中启动B应用中的某个Actio。 Demo

新建一个Module。

MainActivity.java

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
package com.example.app1;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btnStartMyaty).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            // 通过字符串直接启动另一个app的页面。
                startActivity(new Intent("com.example.myapplication.intent.activity.MyAty"));
            }
        });
    }
}

多个Activity拥有同一个Intent Action 新建Activity命名为MyAct1 之后的代码一样

AndroidManiFest.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MyAty"
            android:label="MyAty">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />

                <action android:name="com.example.myapplication.intent.activity.MyAty" />
            </intent-filter>
        </activity>
        <activity android:name=".MyAty1"
            android:label="@string/title_activity_my_aty1">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT"></category>
                <action android:name="com.example.myapplication.intent.activity.MyAty"></action>
            </intent-filter>
        </activity>
    </application>

</manifest>

此时我们在运行启动。

https://island-hexo.oss-cn-beijing.aliyuncs.com/10084251.jpg

会弹出提示,让我们选择启动哪一个Activity。

相关内容