Android studio Intent的使用

1.为什么要使用Intent?

  Intent 是 Android 程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组 件想要执行的动作,还可以在不同组件之间传递数据。Intent 一般可被用于启动活动、启动 服务、以及发送广播等场景,由于服务、广播等概念

Intent分为俩种:显示Intent 和隐式Intent

1.1显示Intent

显示类型一般创建在活动中,例如跳转页面:

Intent intent = new Intent(当前页面.this, 跳转的页面.class);
startActivity(intent);

1.2隐式Intent

隐式类型一般在 AndroidManifest.xml 配置  

<activity android:name=".SecondActivity" >
<intent-filter>
//<action>标签中我们指明了当前活动可以响应 com.example.activitytest.ACTION_START 这个 action
<action android:name="com.example.activitytest.ACTION_START" />
//<category>标签则包含了一些附加信息,更精确地指明了当前的活动能够响应的 Intent 中还可能带有的 category
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
//只有<action>和<category>中的内容同时能够匹配上 Intent 中指定的 action 和 category 时,这个活动才能响应该 Intent。

下面看一下主代码(MainActivity)的点击事件

button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//我们使用了 Intent 的另一个构造函数,直接将 action 的字符串传了进去,表明我们想要启动能够响应 com.example.activitytest.ACTION_START 这个 action 的活动
Intent intent = new Intent("com.example.activitytest.ACTION_START");
startActivity(intent);//在调用startActivity()方法的时候会自动将这个 category 添加到 Intent 中
}
});

隐式Intent更多用法扩展:

使用隐式 Intent,我们不仅可以启动自己程序内的活动,还可以启动其他程序的活动, 这使得 Android 多个应用程序之间的功能共享成为了可能。比如说你的应用程序中需要展示 一个网页,这时你没有必要自己去实现一个浏览器(事实上也不太可能),而是只需要调用 系统的浏览器来打开这个网页就行了

例如点击按钮打开百度:

button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//这是一个 Android 系统内置的动作
Intent intent = new Intent(Intent.ACTION_VIEW);
//然后通过 Uri.parse()方法,将一个网址字符串解析成一个 Uri 对象,再调用 Intent 的 setData()方法将这个 Uri 对象传递进去
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);
}
});

还有很多功能,打开软件,百度等等。。。。

2.Intent传递数据

2.1向下一个活动传递数据

FirstActivity SecondActivity 传递数据(向下)

FirstActivity 发送:

button1.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//定义一个字符串数据便于传递
String data = "Hello SecondActivity";
//因为我们需要FirstActivity 向 SecondActivity 传递数据,所以这样写
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
//并通过 putExtra()方法传递了一个字符串。注意这里 putExtra()方法接收两个参数,第一个参数是键,用于后面从 Intent中取值,第二个参数才是真正要传递的数据
intent.putExtra("extra_data", data);
//开始执行
startActivity(intent);
}
});

SecondActivity 接收:

public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.second_layout);
//首先可以通过 getIntent()方法获取到用于启动 SecondActivity 的 Intent
Intent intent = getIntent();
//调用getStringExtra()方法,传入相应的键值,就可以得到传递的数据了
String data = intent.getStringExtra("extra_data");
//输出打印
Log.d("SecondActivity", data);
}
}

2.2返回数据给上一个活动

我们还以俩个活动为例MainActivity和MainAcitivity2:

MainActivity:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //首先定义一个按钮
        Button but = (Button) findViewById(R.id.but);
        //按钮监听事件
        but.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(MainActivity.this,Main2Activity.class);
                /*startActivityForResult()方法接收两个参数,第一个参数还是 Intent,第二个参数是求
                  码,用于在之后的回调中判断数据的来源(请求码-----唯一就可以)*/
                startActivityForResult(intent,1);
            }
        });
    }


    @Override
    //重写onActivityResult
    //第一个参数 requestCode,即我们在启动活动时传入的请求码。第二个参数 resultCode,即我们在返回数据时传入的处理结果。第三个参数 data,即携带着返回数据的 Intent,下面就不做解释了
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        switch(requestCode){
            case 1:
                if(resultCode == RESULT_OK){
                    String data_return = data.getStringExtra("data_return");
                    Toast.makeText(this, ""+data_return, Toast.LENGTH_SHORT).show();
                }
                break;
            default:
                break;
        }
    }

Main2Activity:

public class Main2Activity extends AppCompatActivity {

    @Override
    //当用户按下 Back 键,就会去执行 onBackPressed()方法中的代码,我们在这里添加返回数据的逻辑就行了
    //这里就不做解释了,自己捂捂
    public void onBackPressed() {
        Intent intent = new Intent();
        intent.putExtra("data_return","Hello");
        setResult(RESULT_OK,intent);
        finish();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        //这俩步就不用多说了吧阿巴阿巴
        Button but2 = (Button) findViewById(R.id.but2);
        but2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //构建一个Intent,用来传数据而已,并没有其他意图
                Intent intent = new Intent();
                //用putExtra方法,来传输键值对
                intent.putExtra("data_return","Hello MainActivity");
                /*setResult方法接收俩个参数,第一个参数用于向上一个活动返回处理结果,一 般只 使用 			RESULT_OK 或RESULT_CANCELED 这两个值,第二个参数则是把带有数据的 Intent 传递回去*/
                setResult(RESULT_OK,intent);
                //销毁当前活动
                finish();
            }
        });

    }
}

  • 6
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值