Intent 简单使用

来源:互联网 发布:精索静脉曲张程度数据 编辑:程序博客网 时间:2024/06/11 02:11

Intent 简介

Intent 是一个消息传递对象,使用它从其他应用组件请求操作。尽管 Intent 可以通过多种方式促进组件之间的通信,但其基本用例主要包括以下三个:

  • 启动 Activity:
    Intent 传递给 startActivity(),来启动新的 Activity 。Intent 描述了要启动的 Activity,并携带了任何必要的数据。在 Activity 完成后收到结果,调用 startActivityForResult() 启动另一个 Activity。在 Activity 的 onActivityResult() 回调中, 结束 Activity 将数据作为单独的 Intent 对象被前一个 Activity 接收。
  • 启动服务:
    Service 不使用用户界面而在后台执行操作。通过将 Intent 传递给 startService(),可以启动服务执行一次性操作(例如,下载文件)。Intent 描述了要启动的服务,并携带了任何必要的数据。如果服务旨在使用客户端-服务器接口,则通过将 Intent 传递给 bindService(),可以从其他组件绑定到此服务。
  • 传递广播:
    广播是任何应用均可接收的消息。系统将针对系统事件(例如:系统启动或设备开始充电时)传递各种广播。通过将 Intent 传递给 sendBroadcast()sendOrderedBroadcast()sendStickyBroadcast(),可以将广播传递给其他应用。

使用 Intent

创建 Intent

  • 显式 Intent - 按名称(完全限定类名)指定要启动的组件。
    Intent intent = new Intent(MainActivity.this, SecondActivity.class);
  • 隐式 Intent - 不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它。

配置 Manifest.xml
Manifest.xml 中目的 Activity 中设置意图过滤器 <intent-filter>设置 <action><data><category> 属性

<activity android:name=".SecondActivity">    <intent-filter>        <action android:name="android.intent.action.my_action"/>        <category android:name="android.intent.category.my_category"/>        <category android:name="android.intent.category.DEFAULT"/>    </intent-filter></activity>

创建Intent

    Intent intent = new Intent();    intent.setAction("xxx");    intent.addCategory("xxx");    // 还有    intent.setData("xxx");    intent.setType("xxx");    // or    intent.setDataAndType("xxx","yyy");

添加数据

    // putExtra 传值    intent.putExtra("key_name", data);    // 或着使用 Bundle    Bundle bundle = new Bundle();    bundle.putString("data", data);    intent.putExtras(bundle);

启动 Activity

  • 将 Intent 传递给 startActivity() 或者 startActivityForResult() 启动 Activity
    startActivity(intent);    // 或者    startActivityForResult(intent, 0);

返回数据

  • startActivityForResult(intent, 0) 方法启动Activity,setResult(RESULT_OK,intent)方法配置返回数据,重写 onActivityResult() 方法
    // 在后一个 Activity 中    setResult(RESULT_OK,intent);    // 在前一个 Activity 中,重写 onActivityResult() 方法    @Override    protected void onActivityResult (int requestCode, int resultCode, Intent data) {        switch (resultCode){            case RESULT_OK:                Bundle bind = data.getExtras();                String data = b.getString("back_key");                break;            default:                break;        }     }

Intent 启动 Service

显式 Intent

    Intent downloadIntent = new Intent(this, DownloadService.class);    downloadIntent.setData(Uri.parse(fileUrl));    startService(downloadIntent);   

隐式 Intent

    Intent sendIntent = new Intent();    sendIntent.setAction(Intent.ACTION_SEND);    sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);    sendIntent.setType("text/plain");    if (sendIntent.resolveActivity(getPackageManager()) != null) {        startActivity(sendIntent);    }

全部代码放在github上:https://github.com/bazhancong/IntentDemo

0 0
原创粉丝点击