Intent
在Android中Intent非常常用,是个强大的本地交互工具。
Intent是什么?
英文翻译为“意图”,我理解为可以携带数据的指令。
能干嘛?比如:
微信支付成功后会跳转回原来的页面并提示已经支付成功
分享功能,点击分享会出现朋友圈,微博的选择界面给你选择并分享内容
知识点总结
一.Activity之间的页面跳转
Intent i = new Intent(本页面.this,需要跳转的页面.class);
startActivity(i);
二.App页面的数据传输
数据传输
放入数据
private static final String TAG ="Mainactivity" //先自定义一个值为Mainactivity的String常量 ....... Intent i = new Intent(本页面.this,需要跳转的页面.class); i.putExtra(TAG,数据); //添加标识字符串和数据值 startActivity(i)
跳转的页面获取数据
Intent i = getIntent(); String str = i.getStringExtra("Mainactivity"); //通过分析值来分析常量名再来分析携带的数据,提高数据的安全性
三.数据传输并能返回结果
用
startActivityForResult
启动pravate fianl static int Code = 0; //自定义一个int数值 ...... Intent i = new Intent(本页面.this,需要跳转的页面.class); i.putExtra(TAG,数据); startActivityForResult(i,Code); //添加一个识别代码,用来识别是从那个页面返回的数据
跳转的页面获取数据并用
setResult
返回结果值pravate fianl static String RETURTAG = "return" //定义个返回的常量 ....... Intent i = getIntent(); String str = i.getStringExtra(数据); Intent intent = new Intent(); intent.putExtra(RETURTAG,数据); setResult(RESULT_OK,i); //返回一个int类型的RESULT_OK结果值
主页面重写
onActivityResult
protect void onActivityResult(int requetCode,int resultCode,Intent data){ if(requestCode == code){ //如果要求的requestCode和此页面的Code对应 if(resultCode == RESULT_OK) //如果结果值成功 ...... //执行操作 }
四.不同应用之间的交互
分享文本信息给其他应用
Intent i = new Intent(); i.putExtra(Intent.EXTRA_TEXT, 数据); //使用Intent自带的String常量携带数据 i.setAction(Intent.ACTION_SEND); //设置行为信息 i.setType("text/plain"); //设置传送数据种类 startActivity(i);
分享图片
i.putExtra(Intent.EXTRA_STREAM, uriToImage); //uriToImage为图片链接 i.setType("image/jpeg");
发送多块内容
ArrayList<Uri> imageUris = new ArrayList<Uri>(); imageUris.add(imageUri1); // 添加你的图片地址 imageUris.add(imageUri2) ......... i.setAction(Intent.ACTION_SEND_MULTIPLE); i.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris); i.setType("image/*"); ........
可以在
startActivit``中
createChooser`自定义选择程序界面的标题startActivity(Intent.createChooser(i,"选择你要启动的程序"))
五.Intent接收其他程序的数据并处理
清单文件在
<activity>
中添加<intent-filter>
<intent-filter > <action android:name="android.intent.action.SEND"/> //匹配接收的行为信息值 <category android:name="android.intent.category.DEFAULT"/> //匹配类型,此处为默认值,Intent.ACTION_SEND属于默认值 <data android:mimeType="text/plain"/> //匹配数据类型 </intent-filter>
处理接收到的数据
此处要注意避免在UI线程中处理获取到的数据
protected void onCreate(Bundle savedInstanceState) { ....... Intent i =getIntent(); String action =i.getAction(); String type=i.getType(); //若从Intent中取得的行为信息和数据种类相对应,执行方法handIntent if(Intent.ACTION_SEND.equals(action) && type != null){ if("text/plain".equals(type)){ handIntent(i); } } } ...... public void handIntent(Intent i){ String str = i.getStringExtra("Intent.EXTRA_TEXT"); // 执行UI更新操作 }
六.示例:发送一段文字显示在另一个APP上
写一段文字发送
选择接收的APP,选择IntentFilter
在接收页面显示你输入的文字
示例代码
test的代码
MainActivity.
protected void onCreate(Bundle savedInstanceState) { ...... Button button = (Button)findViewById(R.id.button2); EditText et = (EditText)findViewById(R.id.editText1); button.setOnClickListener(new OnClickListener() { public void onClick(View v) { // TODO Auto-generated method stub String sentText = et.getText().toString(); Intent i = new Intent(); i.setAction(Intent.ACTION_SEND); i.putExtra(Intent.EXTRA_TEXT, sentText); i.setType("text/plain"); startActivity(i); } }); }
IntentFilter的代码
MainActivity.
protected void onCreate(Bundle savedInstanceState) { ....... TextView text = (TextView)findViewById(R.id.text); Intent i =getIntent(); String action =i.getAction(); String type=i.getType(); if(Intent.ACTION_SEND.equals(action) && type != null){ if("text/plain".equals(type)){ handIntent(i); } }} .......... //定义个处理接收数据的方法 public void handIntent(Intent i){ String getText = i.getStringExtra(Intent.EXTRA_TEXT); if (getText != null){ text.setText(getText); }
清单文件.
<intent-filter > <action android:name="android.intent.action.SEND"/> <category android:name="android.intent.category.DEFAULT"/> <data android:mimeType="text/plain"/> </intent-filter>