初窥Intent

来源:互联网 发布:路由器网络延迟不稳定 编辑:程序博客网 时间:2024/06/03 13:15


在firstActivity里写的一段代码

Button button1 =(Button) findViewById(R.id.button_1);

button1.setOnClickListener(newView.OnClickListener()

{

    public voidonClick(View v)

    {

        String s = " HelloNext";

        Toast.makeText(FirstActivity.this,"you clicked Button1",Toast.LENGTH_SHORT).show();

        Intenti = newIntent("6");

        i.putExtra("extra_data",s);

        startActivity(i);

         

    }

});

在AndroidMainfest.xml里注册的东西

<activityandroid:name=".SecondActivity">

    <intent-filter>

        <actionandroid:name="6"/>

 

       <categoryandroid:name="android.intent.category.DEFAULT"/>

 

    </intent-filter>

</activity>

通过今天的学习,intent像一个容器

首先他能装载一个活动,第一行代码用的是隐式intent

只需要键入一个action name即可

在注册表中 将第二个活动 附上 action的name 即可进行访问

橙色代码部分也可以替换为如下代码

Intent ii = new Intent(FirstActivity.this,SecondActivity.class);

这种代码形式为显示intent

需要键入两个参数,一个参数需要一个活动触发的类,另一个是 需要触发的活动

两种代码形式都能访问需要访问的活动

Intent还能调用手机里的一些活动

代码如下:

Intent intent =new Intent(Intent.ACTION_DIAL);

intent.setData(Uri.parse("tel:15846585631"));

startActivity(intent);

通过 setData 函数  与Uri函数可以将浏览器甚至拨号器的一些功能传入intent里面

再通过startActivity函数启动活动

这段代码直接可以实现给电话号码拨号

下面在附上用隐式代码写的访问网页的代码

 
首先创建一个新的Intent 
Intent it = new Intent(Intent.ACTION_DIAL);it.setData(Uri.parse("http://www.baidu.com"));startActivity(it);

 

在注册表里的 data android:scheme 协议是http

<intent-filter>    <action android:name="android.intent.action.VIEW"/>    <category android:name="android.intent.category.DEFAULT"/>    <data android:scheme="http"/></intent-filter>

 

现在键入这一串值之后现在ThirdActivity就和浏览器一样可以打开浏览器

 

Intent 的一个功能是存储数据

利用intentputExtra函数

需要键入两个值,第一个值是key,第二个值是 String

代码如下:

 

String s = " HelloNext";Toast.makeText(FirstActivity.this,"you clicked Button1",Toast.LENGTH_SHORT).show();Intent i = new Intent("6");i.putExtra("extra_data",s);startActivityForResult(i,1);

 

在第二个个活动中取出

getIntent函数

代码如下:

 

Button btn2 =(Button)findViewById(R.id.button_2);Intent in = getIntent();String s = in.getStringExtra("extra_data");Toast.makeText(SecondActivity.this,s,Toast.LENGTH_SHORT).show();
 
以上三行代码能从一个活动传递数据到下一个活动
 
Intent还能把数据传递到上一个活动
 
代码如下:
 
在第一个活动中
Intent i = new Intent("6");startActivityForResult(i,1);
 
 
Intent intent = new Intent();intent.putExtra("data for FA","HelloFA");setResult(RESULT_OK,intent);finish();
 
通过putExtra函数把数据存进,还是像上一段代码一样,
需要一个key值,一个String
SetResult函数用来存储 resultCode
一般只用两个值 RESULT_OK 或是 RESULT_CANCELED
 
在主类以外复写一个函数
复写函数如下:
 
protected void onActivityResult(int requestCode, int resultCode, Intent data){    switch (requestCode)    {        case 1:            if(resultCode == RESULT_OK)            {                String returnedData = data.getStringExtra("data for FA");                Log.d("FirstActivity",returnedData);                Toast.makeText(FirstActivity.this,returnedData,Toast.LENGTH_SHORT).show();            }    }}
 

 

之后就能将次活动中的数据传递到上一个活动中去了

 

总结:

把一个数据从一个活动传递到下一个活动中时要

要用引用.putExtra(keyString)函数传递一个key值,和一个String类型数据

在下一个活动中接收数据时要用两个函数

Intent it = getIntent();

再用String s = in.getStringExtra("extra_data")函数接收

 

把一个数据传递到前一个活动,首先要用

startActivityForResult(i,1);
把一个活动与请求值传入函数中,这个函数可以理解成一个活动用密码请求一个结果、
而在第二个函数中我们需要设置这个结果
intent.putExtra("data for FA","HelloFA");setResult(RESULT_OK,intent);
 
第一个intent中装活动跟请求值,第二个活动装数据 setResult 存储结果值跟数据
最后在复写你的函数加入你的逻辑就能把数据成功传递
protected void onActivityResult(int requestCode, int resultCode, Intent data)
 
 

 

原创粉丝点击