Android_Activity(二)
2016-06-05 09:14
387 查看
Android_Activity_Intent
我们写Android程序的时候,一个程序肯定不止一个Activity,肯定会有很多的Activity,如何让这些Activity串联起来呢?那么就需要使用我们今天所说的Intent。
Intent一般可被用于启动活动、启动服务、以及发送广播。在Android中Intent一共分为两种,一个是隐士Intent和显示Intent
使用显示Intent
这里我创建了SecondActivity,它的布局中只是有一个Button。现在就让我们看看点击FirstActivity中的按钮如何跳转到SecondActivity中吧!
隐士Intent
隐士Intent,它并不明确指定出我们想要启动哪一个活动,而是制定了一系列更为冲向的action和category等信息,然后交由系统去分析这个Intent,并帮我们找到合适的活动去启动。
1、在AndroidManifest.xml文件中在相应的Activity中添加Intent-filter属性,并在Intent-filter属性中添加action和category属性。
2、在FirstActivity中的按钮的点击事件中添加如下代码:
这里只是指定了action的值,并没有指定category的值,因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中。
每一个Intent只能指定一个action,但却能指定多个category
我们可以在AndroidManifest.xml文件中的SecondActivity中添加一个category:
当我们在FirstActivity中按钮的点击事件中就可以这么写了;
更多隐士Intent的用法
使用隐士Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享成为了可能。
当你的应用程序中需要展示一个网页,这时你没有必要自己去实现一个浏览器,而是只需要调用系统的浏览器来打开这个网页就行了。
Intent.ACTION_VIEW,这时一个Android系统内置的动作,其常量值为android.intent.action.VIEW。然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,在调用Intent的setData()方法将这个Uri对象传递进去。
以上是通过代码指定Data的数据的,我们还可以在AndroidManifest中指定数据的。这样能够更精确的指定当前活动能够响应什么类型的数据。
data标签中主要可以配置一下内容:
android:scheme
用于指定数据的协议部分,如上例中的http部分。
android:host
用于指定数据的主机部分,如上例中的www.baidu.com
android:port
用于指定数据的端口部分,一般紧随在主机名之后。
android.path
用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
android:mimeType
用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
我新建了一个ThirdActivity,并在AndroidManifest中这样配置这个Activity:
这样不仅可以启动Android自带的浏览器,还可以启动我们自己的程序。
调用系统的拨打电话的界面
我在FirstActivity中按钮的点击事件中添加了以下几行代码:
向下一个活动传递数据
Intent不仅可以启动Activity、Service、Broadcast、而且还可以携带数据传给下一个Activity。
1、在FirstActivity中用Intent传递数据。
2、在SecondActivity中接收数据。
3、打印的Log日志:
返回数据给上一个活动
Activity中有一个startActivityForResult()方法也是用于启动活动的,但这个方法期望在活动销毁的时候能够返回一个结果给上一个活动。
1、在FirstActivity中的按钮的点击事件代码改写成:
2、在SecondActivity中给按钮添加点击事件,当点击按钮的时候,SecondActivity将数据传给FirstActivity:
3、在FirstActivity中重写onActivityResult()方法:
4、我打印的Log日志:
当我们在SecondActivity中没有点击按钮,直接按Back键返回到FirstActivity中的时候,我们也想实现将数据传递给FirstActivity,那么我们就要在SecondActivity中重写onBackPressed()方法
我们写Android程序的时候,一个程序肯定不止一个Activity,肯定会有很多的Activity,如何让这些Activity串联起来呢?那么就需要使用我们今天所说的Intent。
Intent一般可被用于启动活动、启动服务、以及发送广播。在Android中Intent一共分为两种,一个是隐士Intent和显示Intent
使用显示Intent
这里我创建了SecondActivity,它的布局中只是有一个Button。现在就让我们看看点击FirstActivity中的按钮如何跳转到SecondActivity中吧!
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent(FirstActivity.this,SecondActivity.class); startActivity(intent); } });
隐士Intent
隐士Intent,它并不明确指定出我们想要启动哪一个活动,而是制定了一系列更为冲向的action和category等信息,然后交由系统去分析这个Intent,并帮我们找到合适的活动去启动。
1、在AndroidManifest.xml文件中在相应的Activity中添加Intent-filter属性,并在Intent-filter属性中添加action和category属性。
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="com.example.activitytest.ACTION_START"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity>
2、在FirstActivity中的按钮的点击事件中添加如下代码:
Button btn = (Button) findViewById(R.id.firstActivity_btnOne); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent=new Intent("com.example.activitytest.ACTION_START"); startActivity(intent); } });
这里只是指定了action的值,并没有指定category的值,因为android.intent.category.DEFAULT是一种默认的category,在调用startActivity()方法的时候会自动将这个category添加到Intent中。
每一个Intent只能指定一个action,但却能指定多个category
我们可以在AndroidManifest.xml文件中的SecondActivity中添加一个category:
<category android:name="com.example.activitytest.MY_CATEGORY"/>
当我们在FirstActivity中按钮的点击事件中就可以这么写了;
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent("com.example.activitytest.ACTION_START"); intent.addCategory("com.example.activitytest.MY_CATEGORY"); startActivity(intent); } });
更多隐士Intent的用法
使用隐士Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动,这使得Android多个应用程序之间的功能共享成为了可能。
当你的应用程序中需要展示一个网页,这时你没有必要自己去实现一个浏览器,而是只需要调用系统的浏览器来打开这个网页就行了。
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent =new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse("http://www.baidu.com")); startActivity(intent); } });
Intent.ACTION_VIEW,这时一个Android系统内置的动作,其常量值为android.intent.action.VIEW。然后通过Uri.parse()方法,将一个网址字符串解析成一个Uri对象,在调用Intent的setData()方法将这个Uri对象传递进去。
以上是通过代码指定Data的数据的,我们还可以在AndroidManifest中指定数据的。这样能够更精确的指定当前活动能够响应什么类型的数据。
data标签中主要可以配置一下内容:
android:scheme
用于指定数据的协议部分,如上例中的http部分。
android:host
用于指定数据的主机部分,如上例中的www.baidu.com
android:port
用于指定数据的端口部分,一般紧随在主机名之后。
android.path
用于指定主机名和端口之后的部分,如一段网址中跟在域名之后的内容。
android:mimeType
用于指定可以处理的数据类型,允许使用通配符的方式进行指定。
我新建了一个ThirdActivity,并在AndroidManifest中这样配置这个Activity:
<activity android:name=".ThirdActivity"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="http" android:host="www.baidu.com"/> </intent-filter> </activity>
这样不仅可以启动Android自带的浏览器,还可以启动我们自己的程序。
调用系统的拨打电话的界面
我在FirstActivity中按钮的点击事件中添加了以下几行代码:
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent =new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:10086")); startActivity(intent); } });
向下一个活动传递数据
Intent不仅可以启动Activity、Service、Broadcast、而且还可以携带数据传给下一个Activity。
1、在FirstActivity中用Intent传递数据。
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String data="Hello SecondActivity"; Intent intent =new Intent(FirstActivity.this,SecondActivity.class); intent.putExtra("data",data); startActivity(intent); } });
2、在SecondActivity中接收数据。
Intent intent =getIntent(); String data= intent.getStringExtra("data"); Log.i("SecondActivity",data);
3、打印的Log日志:
06-05 10:13:53.794 26167-26167/com.example.chw.activitytest I/SecondActivity: Hello SecondActivity
返回数据给上一个活动
Activity中有一个startActivityForResult()方法也是用于启动活动的,但这个方法期望在活动销毁的时候能够返回一个结果给上一个活动。
1、在FirstActivity中的按钮的点击事件代码改写成:
btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent =new Intent(FirstActivity.this,SecondActivity.class); startActivityForResult(intent,1); } });
2、在SecondActivity中给按钮添加点击事件,当点击按钮的时候,SecondActivity将数据传给FirstActivity:
Button btn2 = (Button) findViewById(R.id.second_Btn2); btn2.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { String data="Hello FirstActivity"; Intent intent =new Intent(); intent.putExtra("data",data); setResult(RESULT_OK,intent); //一定要记住写finish()方法 finish(); } });
3、在FirstActivity中重写onActivityResult()方法:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch(requestCode){ case 1: if (resultCode==RESULT_OK) { String resultData=data.getStringExtra("data"); Log.i("FirstActivity",resultData); } break; } }
4、我打印的Log日志:
06-05 10:26:28.864 6101-6101/com.example.chw.activitytest I/FirstActivity: Hello FirstActivity
当我们在SecondActivity中没有点击按钮,直接按Back键返回到FirstActivity中的时候,我们也想实现将数据传递给FirstActivity,那么我们就要在SecondActivity中重写onBackPressed()方法
@Override public void onBackPressed() { String data="Hello FirstActivity"; Intent intent =new Intent(); intent.putExtra("data",data); setResult(RESULT_OK,intent); finish(); }
相关文章推荐
- Android全屏,隐藏状态栏和标题栏
- 在Android中区分点击和滑动操作
- android炫酷实用demo集锦
- 【Android】使用Git
- 安卓开发,从相册或者相机中选择一张图片并裁剪,上传和下载。
- Android Picasso的简单使用
- 二、Lambda表达式
- Android ADB server didn't ACK * failed to start daemon * 简单有效的解决方案
- Android的启动模式
- Android自定义View流程
- android基础之短信发送
- Android消息机制
- Android生命周期的理解
- Error inflating class android.support.design.widget.TabLayout
- 断点续传android版本
- Android 自定义 view(三)—— onDraw 方法理解
- Android热修复:Andfix和Hotfix,两种方案的比较与实现
- 单机搭建Android开发环境详解
- 在Android上使用qemu-user运行可执行文件
- Android BLE 蓝牙实践