Intent的用法知识总结

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>
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值