赞
踩
《一:显示意图和隐式意图》
1.显示意图
//想打开的页面需要在创建意图时显式指定要打开那个Activity
Intent intent = new Intent(this, 指定Activity.class);
startActivity(intent);
2.隐式意图:没有说明要打开哪一个页面,而是通过匹配来确定怎么打开,若一个匹配就直接打开,多个匹配则以列表的形式选择打开(当应用只想和其他应用交互时才会用到)
在开启方MainActivity中
Intent intent = new Intent();
//想启动某个页面,可以为页面配置一个ACTION属性(也可在意图构造器中传入action类型创建意图)
intent.setAction("包名.action.自定义名称");
startActivity(intent);
<!-- 1.被开启方AndroidManifest.xml中(对应activity中)-->
<intent-filter>
<action android:name="包名.action.自定义名称" />
<!-- 2.本界面默认的页面,如果配置了一个或多个action标签,category标签必须配置 -->
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
开启方MainActivity中
Intent intent = new Intent();
//1.告诉系统想启动一个带有浏览器action的界面
intent.setAction("android.intent.action.VIEW");//浏览器显示界面action
//2.创建uri的型数据
Uri data = Uri.parse(网址);//创建uri
//3.告诉系统该展示成什么样的格式
intent.setDataAndType(data, "text/html");//为意图设置data和type
startActivity(intent);
被开启方AndroidManifest.xml中(对应activity中)
<intent-filter >
<!-- 1.若请求uri(data)必须配置此action的值,sms可不配 -->
<action android:name="android.intent.action.VIEW" />
<!-- 2.本界面默认的页面,如果配置了一个或多个action标签,category标签必须配置 -->
<category android:name="android.intent.category.DEFAULT" />
<!-- 3.如果配置了data,则必须配置action,不管代码中是否有setAction -->
<data android:mimeType="类型" android:scheme="网址头(如http)" android:host="主机地址"
android:port="端口" android:path="子文件路径" />
</intent-filter>
《二:界面间数据的传递【显式意图传值方式】(界面一到界面二)》
//1.创建意图时指定打开界面二
Intent intent = new Intent(界面一的Activity.this, 界面二的Activity.class);
//2.1为界面二的意图中设置需要传递的数据类型: 名称和值
intent.putExtra(String name, dataTypeValue);
//2.2为界面二的意图中设置需要传递的对象(对象必须实现序列化接口)
intent.putExtra(String objName, obj);
//3.启动意图
startActivity(intent);
Intent intent = getIntent();
//2.1直接指定数据类型获取值
dataType name = (dataType) intent.getIntExtra(dataName, 无值返回);
//2.2获取Extras再从中获取值
dataType name = (dataType) intent.getExtras().get(dataName);
//2.3获取实现序列化接口对象
objType obj = (objType) intent.getExtras().getSerializable(objName)
《三:隐式意图实例-隐式浏览器和激活系统短信》(当应用只想和其他应用交互时才会用到)
1.启动浏览器 查看启动Activity意图的日志。
图片
2.查看 浏览器 的源代码中的AndroidManifest.xml文件,找到对应的应用,复制相应的intent-filter配置到本项目的MainActivity的activity中.
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:scheme="about" />
<data android:scheme="javascript" />
</intent-filter>
3.在activity_main.xml中:
<EditText
android:id="@+id/browser_et"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<WebView
android:id="@+id/browser_wv"
android:layout_width="match_parent"
android:layout_height="match_parent" />
4.在MainActivity中,启用WebView:(查看BrowserActivity.java中搜索 getIntent 得启发)
EditText et = (EditText) findViewById(R.id.browser_et);
WebView wv = (WebView) findViewById(R.id.browser_wv);
Intent intent = getIntent();
Uri data = intent.getData();
if(data != null){
String uri = data.toString();
et.setText(uri);
//1.某些网页控件默认不支持js,需手动设置打开
wv.getSettings().setJavaScriptEnabled(true);
//2.加载Uri
wv.loadUrl(uri);
//3.解决跳转到新界面还需要打开新的浏览器问题,使用当前的即可
wv.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
//返回true表明告诉系统不要打开新的浏览器,自己处理
return true;
}
});
}
5.AndroidManifest.xml中配置网络访问权限:
Intent intent = new Intent(Intent.ACTION_VIEW);
//系统信息发送界面View,可在创建意图时设置action
intent.setData(Uri.parse("sms:12345"));
intent.putExtra("subject", "大众点评");
intent.putExtra("sms_body", "快点发货,饿死了");
startActivity(intent);
《四:开启新界面,获得新界面的返回值》(设置头像)
public void chooseIconClick(View v){
Intent intent = new Intent(this, ChooseIconActivity.class);
//1为requestCode,标识是哪一个页面会返回结果,对应onActivityResult中的参数
startActivityForResult(intent, 1);
}
public class ChooseIconActivity extends Activity implements OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_choose_icon);
findViewById(R.id.e0).setOnClickListener(this);
findViewById(R.id.e1).setOnClickListener(this);
findViewById(R.id.e2).setOnClickListener(this);
findViewById(R.id.e3).setOnClickListener(this);
}
}
public void onClick(View arg0) {
Intent data = new Intent();
switch (arg0.getId()) {
case R.id.e0:
data.putExtra("icon", R.drawable.e0);
break;
case R.id.e1:
data.putExtra("icon", R.drawable.e1);
break;
case R.id.e2:
data.putExtra("icon", R.drawable.e2);
break;
case R.id.e3:
data.putExtra("icon", R.drawable.e3);
break;
}
//resultCode用于标识本页面返回值的类型,可能本页面会有多种类型的值,
//对应startActivityForResult中的接收动作的参数
setResult(0, data);
//必须关闭当前界面才能将意图传出
finish();
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(data != null){
//为界面一中的ImageView设置图片
if(requestCode == 1){
iconIv.setImageResource(data.getIntExtra("icon", 0));
}
}
(1)View.getId():可以得到id.
(2)开启一个Activity有两种形式:需要返回结果和不需要的。前者还需要函数 onActivityResult接收结果。
(3)resultCode在传值时用于标识本页面返回值的类型,requestCode标识是来自哪一个页面返回结果
(4)若要为多个View设置点击事件,采用在本类中事项setOnClickListener,这样只需要写一个函数判断不同的id即可。
(5)界面二的数据要传到界面一中,必须在界面二中调用finish(),不然界面二关闭不了,到不到界面一。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。