Intent的作用
显式intent在活动中的传递
.java文件
/*按钮四的作用*///启动其他活动(intent的隐式实例)
/*
隐式
就是在AndroidManifest.xml文件中为活动响应安卓活动的名字以及活动的种类
并且在.java文件中,使用指定的名字即可。
*/
Button button_action2=(Button)findViewById(R.id.button_action2);
button_action2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent=new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
}
});
隐式intent在活动中的传递
.java文件
/*按钮四的作用*///启动其他活动(intent的隐式实例)
/*
隐式
就是在AndroidManifest.xml文件中为活动响应安卓活动的名字以及活动的种类
并且在.java文件中,使用指定的名字即可。
*/
Button button_action2=(Button)findViewById(R.id.button_action2);
button_action2.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent=new Intent("com.example.activitytest.ACTION_START");
intent.addCategory("com.example.activitytest.MY_CATEGORY");
startActivity(intent);
}
});
AndroidManifest.xml文件
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.example.activitytest.ACTION_START" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="com.example.activitytest.MY_CATEGORY" />
</intent-filter>
</activity>
更多响应intent的方法
.java文件
/*按钮五的作用*///启动其他活动(intent的隐式实例)之启动浏览器
/*
除了http协议之外,我们还有许多其他协议。
比如:geo表示显示地理位置,tel表示拨打电话
tel协议例子:
intent>setData(Uri.parse("tel:10086"));
*/
Button button_actionscan=(Button)findViewById(R.id.button_actionscan);
button_actionscan.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent=new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});
其实我们还可以创建自己的活动去响应对应的协议
AndroidManifest.xml
<activity android:name=".ThirdActivity">
<!--
当我们确定活动三能过响应的action是Intent.ACTION_VIEW的常量值
而category是指向默认的category值
另外在<data>标签中,我们通过android:scheme指定了数据的协议必须是http协议
这样活动三就可以和浏览器一样,响应一个打开网页的Intent了
当再次触发按钮五时
系统可以弹出两个选择项,一个是系统自带的浏览器
另外一个就是我们刚刚编写的活动三(活动三的名字是ActivityTest)
注意的是:活动三只是能够响应执行打开网页的Intent,但实际上这个活动是没有编写加载并显示
网页的功能,所以在真的项目中不要出现这类误导用户的行为
-->
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="http" />
</intent-filter>
</activity>
<activity android:name=".databack" />
<activity android:name=".action_1" />
<activity android:name=".ReceiveData"></activity>
使用intent向下一个活动传递数据
首个(发送).java文件
/*按键六的作用*///传递数据
/*
利用intent
向下一个活动传递数据
*/
Button button_actiondata=(Button)findViewById(R.id.button_actiondata);
button_actiondata.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
String data="Hello master GQ!";
Intent intent=new Intent(FirstActivity.this,ReceiveData.class);
intent.putExtra("extra_data",data);
/*
传递的两个参数,第一个是键,用于后面从Intent中取值
第二个参数才是真正要传递的数据
*/
startActivity(intent);
}
});
次个(接收).java文件
public class ReceiveData extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_receive_data);
Intent intent=getIntent();
String data=intent.getStringExtra("extra_data");
Log.d("ReceiveData",data);
Toast.makeText(ReceiveData.this, data,
Toast.LENGTH_LONG).show();
}
}
返回数据给上一个活动
首个(发送).java文件
/*按键七的作用*///传递数据
/*
利用intent
给上一个活动传递数据
*/
Button button_actiondataback=(Button)findViewById(R.id.button_actiondata);
button_actiondataback.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
Intent intent=new Intent(FirstActivity.this,databack.class);
/*
传递的两个参数,第一个是键,用于后面从Intent中取值
第二个参数才是真正要传递的数据
*/
startActivityForResult(intent,1);
/*
这里用startActivityForResult()方法来启动databack.class
请求代码只要是一个唯一值就可以了,这里传入的数据是1
*/
}
});
}
次个(点击关闭界面).java文件
public class databack extends AppCompatActivity {
@Override
/*
重载父类的onBcakPressed()方法
以防用户不是按的按钮而是是按的back键
导致的无法向上一个活动返回数据的特殊情况
*/
public void onBackPressed() {
Intent intent=new Intent();
intent.putExtra("data_return","Hello My first application!");
setResult(RESULT_OK,intent);
finish();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_databack);
Button button_databack=(Button)findViewById(R.id.button_databack);
button_databack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent();
intent.putExtra("data_return","Hello My first application");
setResult(RESULT_OK,intent);
finish();
/*
创建intent,将要回传的数据存在intent中
调用setResult()方法接收两个参数
第一个参数用于向上一个活动返回处理结果,一般只使用RESULT_OK或者RESULT_CANCELED这两个值
第二个参数则把带有数据的intent传递回去,然后调用finish()方法销毁当前活动
*/
}
});
}
}
首个(返回后的页面,即就是开始启动页面).java文件
/*
对应按键七的取返回值并将七在日志文件中打印出来
onActivityResult()方法带有三个参数
第一个参数requestCode即使我们启动活动是传入的请求码
第二个参数resultCode即我们在返回参数是传入的处理结果
第三个参数data即携带返回的数据的Intent
由于在一个活动中有可能调用startActuvutyForResult()方法去启动很多不同的活动
每一个活动返回的数据都会回调到onActivityForResult()这个方法中,因此我们首先
要做的是检查requesCode的值来判断数据来源。确定数据是从databack返回的之后
我们再通过resultCode的值来判断处理的结果是否成功
最后从data中取值并打印出来,这样我们就完成了向上一个活动返回数据的工作
*为了防止用户是按的back进行的活动返回*
*我们还需要在databack中重写onBackPressed()方法来解决这个问题
*/
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode){
case 1:
if(requestCode==RESULT_OK){
String returnedData=data.getStringExtra("data_return");
Log.d("FirstActivity",returnedData);
}
break;
default:
}
}
今天
先写这一部分的知识点啦!
给大家推荐一首歌
can ‘ t hold us !