第一章 Activity
一、创建Activity
1.创建.java文件
2.继承系统Activity
package com.example.myactivity;
import android.app.Activity;
public class MyActivity extends Activity {
}
3.在AndroidManifest中注册
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myactivity">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MyActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
xml打入方法
1.
2.
4.设置布局资源文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Hello"/>
</LinearLayout>
package com.example.myactivity;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
public class MyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activitymy);
}
}
二、AndroidManife
按住ctrl,点击绿色,可以打开资源文件,在里面设置
三、Activity启动
Activity的启动方法
-
显式启动:
明确指定要启动的Activity的class或者 包名.activitiy类名 -
隐式启动:
设置启动过滤器,通过指定的action或action和data属性,系统会查找符合条件的activity,并启动它
显式启动:
方式一:class跳转
Intent intent = new Intent(Activity1.this, Activity2.class);
startActivity(intent);
方式二:包名.类名跳转
Intent intent = new Intent(); om.maizi.lesson.activitylesson
intent.setClassName(context, “c1”);
startActivity(intent);
方式三:ComponentName跳转
Intent intent = new Intent();
intent.setComponent(new Component(context, Activity2.class))
startActivity(intent);
MyActivity.java
package com.example.myactivity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
public class MyActivity extends Activity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activitymy);
button=findViewById(R.id.Button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setClass(MyActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
}
activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello"/>
<Button
android:id="@+id/Button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="打开第二个界面"/>
</LinearLayout>
SecondActivity.java
package com.example.myactivity;
import android.app.Activity;
import android.os.Bundle;
public class SecondActivity extends Activity {
@Override
protected void onCreate( Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
}
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="第二个界面"/>
</LinearLayout>
AndroidManife.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myactivity">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MyActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".SecondActivity">
</activity>
</application>
</manifest>
创建Activity不要忘记注册它
不要忘记startActivity(intent)
隐式启动
-
方式一:构造时传入actionName
Intent intent = new Intent(“com.maizi.lesson.SecondActivity”);
startActivity(intent); -
方式二:构造完成后设置actionName
Intent intent = new Intent();
intent.setAction(“com.maizi.lesson.SecondActivity”);
startActivity(intent);
注意:如果自己定义的某个Activity要通过隐式启动,在AndroidManifast.xml那么必须加上android.intent.category.DEFAULT,否则不起作用
在AndroidManife中添加
<intent-filter >
<action android:name="abc.SeconActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
MyActivity.java中修改
public void onClick(View v) {
//第一种方法
Intent intent=new Intent("abc.SecondActivity");
startActivity(intent);
//第二种方法
Intent intent=new Intent();
intent.setAction("abc.SecondActivity");
startActivity(intent);
}
关闭Activity
在SecondActivity中创建button,并创建监听,其中关闭代码如下
public void onClick(View v) {
SecondActivity.this.finish();
}
四、配置Action、Category
Action :
它代表系统中已经定义的一系列常用的动作
属性的值是一个字符串
通过setAction()方法或在清单文件AndroidManifest.xml中设置
当有多个Action匹配隐式启动的条件时,将会弹出选择框
AndroidManifest.xml中将两个action的name设置成相同的,其中label为Activity设置名字
<activity android:name=".ThirdActivity" android:label="第三个Activity">
<intent-filter>
<action android:name="abc.SecondActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity android:name=".SecondActivity" android:label="第二个Activity">
<intent-filter>
<action android:name="abc.SecondActivity" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
当点击第一个Activity启动时,多个Action匹配隐式启动的条件,就会就会让用户选择哪个启动
Intent intent=new Intent();
intent.setAction("abc.SecondActivity");
startActivity(intent);
Category
指定当前动作(Action)被执行的环境
通过addCategory()方法或在清单文件AndroidManifest.xml中设置
常用值 :
android.intent.category.LAUNCHER
设置该组件为在当前应用程序启动器,通常和入口ACTION_MAIN配合使用。
<activity android:name=".MyActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
当有多个MAIN和LAUNCHER时手机桌面一个应用会显示多个程序
android.intent.category.DEFAULT
Android系统中默认的执行方式,按照普通Activity的执行方式执行。
注意事项
- 需要隐式启动的Activity必须标记category为android.intent.category.DEFAULT
如果不写会导致,程序异常退出,报错
- android.intent.category.LAUNCHER标记的Activity将会作为app的启动器显示在手机桌面图标上,通常和Action.Main一起使用
五、Activity的生命周期
当个Activity启动生命周期
多个Activity的生命周期
实验记录
MyActivity: MyActivity_onCreate
MyActivity: MyActivity_onStart
MyActivity: MyActivity_onResume
点击按钮
MyActivity: MyActivity_onPause
SecondActivity: MyActivity_onCreate
SecondActivity: MyActivity_onStart
SecondActivity: MyActivity_onResume
MyActivity: MyActivity_onStop
返回
SecondActivity: MyActivity_onPause
MyActivity: MyActivity_onStart
MyActivity: MyActivity_onResume
SecondActivity: MyActivity_onStop
SecondActivity: MyActivity_onDestroy
退出程序
MyActivity: MyActivity_onPause
MyActivity: MyActivity_onStop
MyActivity: MyActivity_onDestroy
六、Activity的启动模式-launchMode
启动模式概念
决定生成新的Activity实例是否重用已存在的Activity实例,是否和其他Activity实例公用一个task里。
Task概念
task是一个具有栈结构的对象,一个task可以管理多个Activity,启动一个应用,也就建一个与之对应的task
配置方法
在manifest文件中Activity节点里增加属性android:launchMode=“standard”
四种启动模式
-
standard
默认的启动模式,每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈
-
singleTop
如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例
SecondActivity 栈顶
ThirdActivity
SecondActivity
MianActivity 栈底 -
singleTask
如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,把该Activity以上的Activity实例都出栈,他就成为栈顶;
ThirdActivity 栈顶
SecondActivity
MianActivity 栈底
再次启动SecondActiviy,会销毁ThirdActivity,变成如下
SecondActivity 栈顶
MianActivity 栈底 -
singleInstance
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别 的Activity存在
MainActivity的TaskID50
SecondSActivity的TaskID51 //新的ID
ThirdActivity的TaskID50 //任然用旧的ID
实现记录
在MainActivity启动ThirdActivity,再启动ThirdActivity,再启动SecondActivity,由于当在singleTop启动模式下,栈顶是第三个Activity,会创建一个新的SecondActivity。
内存中Activity的排列如下
AndroidManife.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.launchmodal">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".ThirdActivity"></activity>
<activity
android:name=".SecondActivity"
android:launchMode="singleTop" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainActivity.java
package com.example.launchmodal;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button_start);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!">
</TextView>
<Button
android:id="@+id/button_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动" />
</LinearLayout>
SecondActivity.java
package com.example.launchmodal;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button button=findViewById(R.id.button_second);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(SecondActivity.this,ThirdActivity.class);
startActivity(intent);
}
});
}
}
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第二个Activity">
</TextView>
<Button
android:id="@+id/button_second"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动第三个Activity"/>
</LinearLayout>
ThirdActivity.java
package com.example.launchmodal;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class ThirdActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_third);
Button button=findViewById(R.id.button_third);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(ThirdActivity.this,SecondActivity.class);
startActivity(intent);
}
});
}
}
activity_third.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第三个Activity">
</TextView>
<Button
android:id="@+id/button_third"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动第二个Activity"/>
</LinearLayout>
七、Activity的启动模式-IntentFlag
-
Task概念
- task是一个具有栈结构的容器,可以放置多个Activity实例
- 启动一个应用,系统就会为之创建一个task,来放置根Activity
- 一个Activity启动另一个Activity时,两个Activity是放置在同一个task中的,后者压入前者所在的task栈,当用户按下后退键,后者从task被弹出,前者又显示在幕前
-
Android:taskAffinity
- 指出了它希望进入的Task
- 如果一个Activity没有显式的指明该Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity
- 如果 Application也没有指明,那么该taskAffinity的值就等于包名
- Task也有自己的affinity属性,它的值等于它的根 Activity的taskAffinity的值
IntentFlag的常用值
1.FLAG_ACTIVITY_NEW_TASK
系统会寻找或创建一个新的task来放置目标Activity,寻找时依据目标Activity的taskAffinity属性进行匹配,如果找到一个task的taskAffinity与之相同,就将目标Activity压入此task中,
如果一个Activity没有显式的指明该Activity的taskAffinity,那么它的这个属性就等于Application指明的taskAffinity,如果Application也没有指明,那么该taskAffinity的值就等于包名,所以实验不设置SecondActivity的taskAffinity会导致,启动第二个Activity时,两个Activity的TaskID相同
如果查找无果,则创建一个新的task,并将该task的taskAffinity设置为目标Activity的taskAfiinity,将目标Activity放置于此task
2.FLAG_ACTIVITY_SINGLE_TOP
和singleTop类似
当task中存在目标Activity实例并且位于栈的顶端时,不再创建一个新的,直接利用这个实例
3.FLAG_ACTIVITY_CLEAR_TOP
和singleTask类似
如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都出栈;
4.FLAG_ACTIVITY_REORDER_TO_FRONT
如果栈里已经存在,则将它拿到栈顶,不会启动新Activity
栈顶
ThirdActivity
SecondActivity
MainActivity
栈底
在第三个Activity中以REORDER_TO_FRONT方式启动第二个Activity
栈顶
SecondActivity
ThirdActivity
MainActivity
栈底
实验记录
AndriodManefest.xml
<activity android:name=".SecondActivity"
android:taskAffinity="flg.newtask.test"></activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
MainActivity.java
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
启动时
当前TaskID53
启动第二个Activity
当前TaskID54
如果不在AndriodManefest设置SecondActivity的taskAffinity属性,两者ID将相同
八、Activity之间的数据传递
- 第一种
Intent. putExtra(String name, 数据类型 value)
- 第二种
复杂类型的数据传递
1、Serilziable
把需要传递的类实现Serilziable接口2、Parceable
把需要传递的类实现Parceable接口
实验记录
MainActivity.java
package com.example.bundle;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button_start);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
//1.直接通过Intent传
// intent.putExtra("new_title","安卓开发行情");
// intent.putExtra("comment",1244);
//2.Bundle打包一起通过Intent传
// Bundle bundle=new Bundle();
// bundle.putString("new_title","安卓开发行情");
// bundle.putInt("comment",1244);
// intent.putExtra("myBundle",bundle);
//1.用Serilziable方法传递对象
// UserInfo userInfo=new UserInfo();
// userInfo.userName="maizi";
// userInfo.age=24;
// userInfo.gender=1;
// intent.putExtra("userInfo",userInfo);
///2.用Parceable方法传递对象
Order order=new Order();
order.address="阳光路";
order.count=3;
order.isReceived=false;
intent.putExtra("order",order);
startActivity(intent);
}
});
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!">
</TextView>
<Button
android:id="@+id/button_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="启动并传递" />
</LinearLayout>
SecondActivity.java
package com.example.bundle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView paramsTextView=findViewById(R.id.tv_params);
TextView comment=findViewById(R.id.comment_count);
//1.直接通过Intent传
// String title=getIntent().getStringExtra("new_title");
// int count=getIntent().getIntExtra("comment",0);
//2.Bundle打包一起通过Intent传
// Bundle bundle=getIntent().getBundleExtra("myBundle");
// String title=bundle.getString("new_title");
// int count=bundle.getInt("comment");
//1和2的输出语句
// paramsTextView.setText(title);
// comment.setText(count+"");//y因为setText有一个重载函数,int的sourceID,将int转化成String,不加""会报错
//1.用Serilziable方法传递对象
// UserInfo userInfo= (UserInfo) getIntent().getSerializableExtra("userInfo");
// paramsTextView.setText(userInfo.userName+","+userInfo.age+","+userInfo.gender);
///2.用Parceable方法传递对象
Order order=getIntent().getParcelableExtra("order");
paramsTextView.setText(order.address+","+order.count+","+order.isReceived);
}
}
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="传入的数据是">
</TextView>
<TextView
android:id="@+id/tv_params"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/comment_count"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
九、Activity数据回传
-
使用startActivityForResult启动。
-
在SecondActivity返回时会回掉 MainActivity中的onActivityResult,要重写里面的方法,进行操作
实验记录
本实验各xml配置和上一题相同
MainActivity.java
package com.example.bundle;
import android.content.Intent;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button_start);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent(MainActivity.this,SecondActivity.class);
startActivityForResult(intent,100);//100是自己定义的,用于区分
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
String back_data=data.getStringExtra("back_data");
Log.e("MainActivity","onActivityResult的requestCode="+requestCode+back_data);
}
}
SecondActivity.java
package com.example.bundle;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
TextView paramsTextView=findViewById(R.id.tv_params);
TextView comment=findViewById(R.id.comment_count);
Intent intent=new Intent();
intent.putExtra("back_data","回传的数据");
setResult(RESULT_OK,intent);
}
}
十、调用系统的Activity
MainActivity.java
package com.example.bundle2;
import android.content.Intent;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button_start);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
//1.打开拨号界面
//intent.setAction(Intent.ACTION_DIAL);
//2.发送短信
// Uri smsToUrl= Uri.parse("smsto:"+"10086");
// intent.setAction(Intent.ACTION_SENDTO);
// intent.setData(smsToUrl);
// intent.putExtra("sms_body","发送的内容");
//3.打开相机
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
startActivity(intent);
}
});
}
}
AndroidManifest.xml(添加如下权限)
<uses-permission android:name="android.permission.CALL_PHONE"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
十一、intentFIlter中的data和type
Data匹配时的规则一共有四条:
- 如果Intent没有指定Data相关的字段,只能匹配上没有指定Data的IntentFilter
- 如果一个Intent只指定了Uri但是没有Type(并且Type也不能够从Uri中分析出)只能匹配到仅指定了相应Scheme且没有指定Type的IntentFilter
- 如果一个Intent只指定了Type,但是没有指定Uri,它只能匹配到只指定了相应Type且没有指定Scheme的IntentFitler
- 如果一个Intent即有Uri又有Type,那么它会匹配上:
- Uri和Type都匹配的IntentFilter;
- 首先Type要匹配,另外如果Intent的Uri是content:或file:,且IntentFilter没有指定Scheme。(因为对于Android来讲content和file这二种Scheme是系统最常见 也是用的最多的,所以就当成缺省值来对待)
MainActivity.java
package com.example.bundle2;
import android.content.Intent;
import android.net.Uri;
import android.provider.MediaStore;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button=findViewById(R.id.button_start);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent=new Intent();
intent.setAction("test.secondActivity");
//1.android:scheme="test"
// intent.setData(Uri.parse("test://www.baidu.com"));
//2.android:scheme="test" android:mimeType="text/plain"
intent.setDataAndType(Uri.parse("test://www.baidu.com"),"text/plain");
startActivity(intent);
}
});
}
}
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.bundle2">
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.SEND_SMS" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="test.secondActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="test" android:mimeType="text/plain"/>
</intent-filter>
</activity>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>