安卓开发过程中Intent的使用
来源:互联网 发布:服装erp软件排名 编辑:程序博客网 时间:2024/06/05 20:33
安卓开发过程中Intent的使用
1.Intent的作用
- Intent中文意思为意图,在安卓中用来实现页面之间的跳转和数据的传递等功能。比如我们的应用从一个页面跳转到另一个页面,一个应用调用另一个应用,浏览器中调用打电话,发短信等功能,还有通过activity启动服务,广播接收者启动服务,广播接收者启动activity等。
- 服务其实就是一个没有界面的应用,比如音乐播放器退之后还可以后台播放,就是通过服务来实现的。广播接收者可以监控手机各种状态,比如开机,受到短信等。当系统发出相应广播时自动执行。这里重点讲解activity的跳转,其他的会在后面的文章中写到。
2.显式意图用法
显示意图基本用在调用本应用页面,代码比较简单。
1. 基本页面跳转
创建两个activity,分别为MainActivity和MainActivity,在清单文件中配置,用开发工具直接创建activity会自动配置。
在MainActivity的布局文件中添加一个按钮并在MainActivity类中添加点击事件,代码如下
activity_main.xml<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.zl.itgeek.intentdemo.MainActivity"> <Button android:id="@+id/bt_1" android:layout_width="match_parent" android:text="@string/toPage2" android:layout_height="wrap_content" /></LinearLayout>
然后再MainActivity.java 中为按钮添加点击事件
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 { Button bt_1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt_1 = (Button) findViewById(R.id.bt_1); bt_1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,Main2Activity.class); startActivity(intent); } }); }}
Intent intent = new Intent(MainActivity.this,Main2Activity.class);中传入的第一个参数为一个Context对象,第二个参数为要跳转的activity的class对象。然后通过startActivity(intent);方法跳转到下一个页面。
- 如果需要传参数到下一个页面中,可以在Intent中加入。比如调用拨号器服务时传递电话号码
public void onClick(View v) { Intent intent = new Intent(MainActivity.this,Main2Activity.class); intent.putExtra("username","zhangsan"); intent.putExtra("age",20); startActivity(intent); }
然后在另一个页面中获取,方法如下
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Intent intent = getIntent(); String username = intent.getStringExtra("username"); int age = intent.getIntExtra("age"); }
- 需跳转到另一页面并从另一页面返回参数的情况。比如跳转到一个登录页面,填完之后需要把用户名和密码返回回来。
MainActivity,javaimport 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 { Button bt_1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bt_1 = (Button) findViewById(R.id.bt_1); bt_1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this,Main2Activity.class); startActivityForResult(intent,150); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode==150){ String username = data.getStringExtra("username"); String password = data.getStringExtra("password"); } }}
Main2Activity.javaimport android.content.Intent;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;public class Main2Activity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); //该代码本应写在事件中,比如按钮点击事件。为了方便起见直接写在onCreat中,实际开发按情况写在相应位置 Intent intent = new Intent(); intent.putExtra("username","aaaaa"); intent.putExtra("password","bbbbb"); setResult(150,intent); }}
和上面的方法的不同之处在于跳转到下一个activity时用到的方法为startActivityForResult(intent,150); 其中第二个参数为发送码,用来标记是从哪个activity中跳转过来,可以自己写一个。
然后在第二个页面中创建Intent对象并把数据放进去。然后用setResult(150,intent);方法,当该页面关闭后跳转到上一个页面时会自动调用protected void onActivityResult(int requestCode, int resultCode, Intent data)
方法,第二个参数为上一个页面的返回码,用于确定是从哪个页面返回的。第三个参数是上一个页面中用于封装数据的intent对象,可以从中取到参数。
3.隐式意图用法
隐式意图通常用来实现不同应用的调用,比如一个应用调用另一个应用。
隐式意图需要被调用的activity在清单文件中配置一个意图过滤器。
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zl.itgeek.intentdemo"> <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> <!-- 为Main2Activity配置意图过滤器 --> <activity android:name=".Main2Activity"> <intent-filter> <action android:name="android.intent.action.VIEW" /><data android:scheme="aaa"/> <data android:host="192.168.0.1" android:path="/index" android:port="222"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> </application></manifest>
其中的
- action 为意图的名字,可以为任意字符串。可以使用系统自带的,也可以自己定义。
- category 为请求的类型,不能为空,可以使用android.intent.category.DEFAULT为默认类型
- data 可以指定一个uri,可以不写。上面的意过滤器对应的uri为 aaa:222//192.168.0.1/index
用户可以通过下面示例代码触发该意图过滤器打开页面。
bt_1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW); intent.addCategory(Intent.CATEGORY_DEFAULT); startActivity(intent); } });
如果有几个action都满足该意图则会弹出选择框。
那么到底哪些属性是需要的哪些是不需要的,又怎么匹配呢。它的匹配存在如下规则
- Intent中即不包含URI也不包含数据类型,IntentFilter只有没有指定URI和data时才会匹配成功
- Intent中只包含URI,那么IntentFilter中也只有只包含URI时才能匹配
- Intent中只包含数据类型,那么IntentFilter中只有不包含URL且只具有相同数据类型的时候才会匹配
- Intent中同时包含URL和数据类型,那么IntentFilter中只要数据类型相同就能匹配,或者一个URI相同也可匹配
- 安卓开发过程中Intent的使用
- 关于安卓开发过程中屏幕的各种使用
- 安卓开发:使用Intent传递对象
- 安卓开发之 Intent的介绍
- 安卓开发-intent和intent-filter
- 安卓开发中SQLite的使用
- 安卓开发中SQLite的使用
- 安卓开发中遇到的Intent的startActivityForResult方法回调后不执行onActivityResult方法
- 安卓开发调试过程中出现的问题
- 安卓开发之Intent
- 安卓开发中intent打开文件详解
- Android开发中Intent的使用总结
- Android开发中Intent的使用
- 安卓开发过程中权限大全
- 安卓开发过程中输入法问题
- 安卓开发——Intent能传递的数据类型
- 安卓-SingleTask启动模式与Intent的使用
- 安卓-SingleTask启动模式与Intent的使用
- 关于struts2和ajax的关系
- #Qt on android#使用Qt 获取GPS信号
- Java并发编程(19):并发新特性—Executor框架与线程池(含代码)
- 自制图像(视觉)处理库
- pip 常用命令
- 安卓开发过程中Intent的使用
- VM虚拟机上不了网
- 调整数组顺序使奇数位于偶数前面
- JS实现文本框不可编辑
- 【神经网络与深度学习】【python开发】caffe-windows使能python接口使用draw_net.py绘制网络结构图过程
- Parajumpers Herre bear erfahrungen final
- spring中为什么要使用IOC
- 【题】【线段树】NKOJ 1317 校门外有很多树
- jdbc关联模型查询-多表查询返回结果集