今天学习 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中的activity
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>
|
此时我们在运行启动。
会弹出提示,让我们选择启动哪一个Activity。