欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android组件之间交互核心Intent用法分析

程序员文章站 2024-03-02 22:21:16
本文实例讲述了android组件之间交互核心intent用法。分享给大家供大家参考,具体如下: 从一个activity启动到另一个activity可以使用startact...

本文实例讲述了android组件之间交互核心intent用法。分享给大家供大家参考,具体如下:

从一个activity启动到另一个activity可以使用startactivity()方法或者是startactivityforresult()方法

第一种:直接启动一个activity

intent intent = new intent(main.this, secondactivity.class);
startactivity(intent);

第二种:启动另一个activity并返回结果

作用:当从第二个activity回跳到前一个activity的时候,就不再需要使用startactivity,也就是说不用两次使用startactivity方法

startactivityforresult(intent intent, int requestcode)

intent 传给要跳转的activity的数据和动作

requestcode >=0就好,随便用于在onactivityresult()区别哪个子模块回传的数据,如果还有c.java ,d甚至e子模块的话,每个区分开不同的requestcode就好。

public class mainactivity extends activity {
  /** called when the activity is first created. */
   @override
    public void oncreate(bundle savedinstancestate) {
      super.oncreate(savedinstancestate);
      setcontentview(r.layout.main);
      //给按钮添加绑定的事件
      button mybutton = (button)findviewbyid(r.id.mybutton);
      mybutton.settext("我的第一个button");
      mybutton.setonclicklistener(new onclick());
    }
   @override
  protected void onactivityresult(int requestcode, int resultcode, intent data) {
    system.out.println(requestcode);
    system.out.println(resultcode);
  }
   public class onclick implements onclicklistener{
      @override
      public void onclick(view v) {
        //生成一个intent对象
        intent intent = new intent();
        intent.putextra("testintent", "testextra");
        intent.setclass(mainactivity.this,secondactivity.class);
        //直接启动一个activity
//       startactivity(intent);
        //启动一个有返回值的activity
        startactivityforresult(intent, 2);
      }
    }
}

setresut(int resultcode, intent intent)

resultcode如果跳转的activity子模块可能有几种不同的结果返回,可以用这个参数予以识别区分。这里还有个特殊的result_ok值,没有特殊情况用它就好了,sdk有说明的。

intent 继续不解释,传回给a的onactivityresult()

复制代码 代码如下:
onactivityresult(int requestcode, int resultcode, intent intent)

这里三个都不用解释了,与上文对应的东西。如果不对requestcode和resultcode 加以识别区分的话,只要有其他activity setresult到了a  onactivityresult()会无差别处理
public class secondactivity extends activity{
  @override
  protected void oncreate(bundle savedinstancestate) {
    // todo auto-generated method stub
    super.oncreate(savedinstancestate);
    this.setcontentview(r.layout.other);
    button btn = (button)findviewbyid(r.id.otherbutton);
    btn.setonclicklistener(new button.onclicklistener(){
      @override
      public void onclick(view v) {
        intent intent = getintent();
        setresult(3, intent);
        finish();
      }
    });
  }
}

如何使用自定义的action属性?

1、定义一个自定义的action名称——常量

public static final string my_action = "hb.com.my_action";

2、使用一个按钮然后给其绑定事件,让它跳转到另一个activity

myactionbtn.setonclicklistener(new button.onclicklistener(){
  @override
  public void onclick(view v) {
    system.out.println("myactionbtn");
//         intent intent = getintent();
// 这里一定要new一个intent对象,如果用上面的则打开的是当前的activity
    intent intent = new intent();
    intent.setaction(my_action);
    startactivity(intent);
  }
});

3、在androidmanifest.xml配置文件中添加activity的名称

<activity android:name=".secondactivity" android:label="@string/secondactivity">
  <intent-filter>
    <action android:name="hb.com.my_action" />
    <category android:name="android.intent.category.default" />
  </intent-filter>
</activity>

备注:hb.com.my_action这个值与intent.setaction(my_action);值是一样的
activity标签在application标签内部
category这个属性在intent filter中必须出现,否则不能测试通过
intent的data属性是指定动作的uri和mime类型,不同的action有不同的data数据指定
intent中的category属性是一个执行action的附加信息
intent的extras属性是添加一些组件的附加信息

//显示_id为1的联系人信息
data = "content://contacts/people/1";
uri = uri.parse(data);
//action_view显示数据给用户
intent.setaction(intent.action_view);
intent.setdata(uri);
startactivity(intent);
//编辑_id为1的联系人信息
data = "content://contacts/people/1";
uri = uri.parse(data);
//action_edit显示可编辑数据
intent.setaction(intent.action_edit);
intent.setdata(uri);
startactivity(intent);
//显示拨打电话的界面
data = "tel:13811111111";
uri = uri.parse(data);
//action_dial显示拨打电话的面板
intent.setaction(intent.action_dial);
intent.setdata(uri);
startactivity(intent);
//直接拨打电话
data = "tel:13811111111";
uri = uri.parse(data);
//action_call直接打电话
intent.setaction(intent.action_call);
intent.setdata(uri);
startactivity(intent);
//访问浏览器
data = "http://www.baidu.com";
uri = uri.parse(data);
//action_view显示数据给用户
intent.setaction(intent.action_view);
intent.setdata(uri);
startactivity(intent);
//访问地图
data = "geo://39.92,116.46";
uri = uri.parse(data);
//action_view显示数据给用户
intent = new intent(intent.action_view,uri);
startactivity(intent);

<intent-filter>列表中的action不能为空,否则程序阻塞不能通过。

如果intent对象指定了一个action属性,那么要想通过action测试,intent对象指定的属性必须和intent filter中的匹配,否则不能通过测试。

如果intent对象中没有指定action属性,则自动通过测试。

更多关于android相关内容感兴趣的读者可查看本站专题:《android文件操作技巧汇总》、《android编程开发之sd卡操作方法汇总》、《android开发入门与进阶教程》、《android资源操作技巧汇总》、《android视图view技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。