lichao_normal

导航

Intent 类型

intent是一个消息传递对象,你可以使用它从其他应用组件请求操作。intent的常用操作。

  启动Activity

  activity已知是一个android的一个界面,通过调用startActivity(),我们可以启动一个新的activity,并且实现界面的跳转。并且可以传递一些简单的数据。

  如果我们希望能够从一个activity获取result的时候,我们可以调用startActivityForResult().这样,我们就可以启动一个新的activity,并且当这个新的activity执行完成后,我们可以得到一些返回的数据。

  启动服务

  service是一个不会使用用户界面,也就是在后台运行的一个线程或者进程。将intent传递给startService(),我们可以启动一个服务完成一些操作,如播放音乐等。intent的主要作用是用来设置要启动的服务过程,并且可以传递一些简单的数据。

  传递广播

  广播式android的一个相当重要的组件,广播是任何应用都可以接受的消息。系统针对系统事件传递各种广播。通过intent传递给sendBroadcast(),sendOrderBroadcast()或者sendStickyBroadcast().,这样可以将广播传递给其他应用。

  intent的使用分为两种类型

  显式使用intent:明确指定activity来启动组件。这样使用比较简单,但是有明确的要求就是,我们必须在我们需要明确的知道要启动的activity的类名。创建显式intent启动activity和service,系统将立即启动intent对象中指定的应用组件。代码:

  

Intent intent=new Intent();
intent.setClass(MainActivity.this, DisplayMessageActivity.class);
EditText edit=(EditText)findViewById(R.id.edit1);
String message=edit.getText().toString();
intent.putExtra("message", message);
startActivity(intent);
显式使用intent

 

  隐式使用intent:不特别指定要启动相应的activity的类名,而只要声明要执行的常规操作,从而允许其他应用中的组件来处理它。创建隐式intent时,android系统通过将intent的内容与设备上其他应用的清单文件中声明的intent过滤器进行比较,从而找到要其动态的相应组件。如果intent和intent过滤器匹配,则系统将启动该组件,并且向其传递intent,以启动一个新的activity或service。并且如果有多个intent过滤器匹配,则系统会弹出一个对话框,以便用户选择要执行的新的应用,就如同windows下对文件的打开方式有多中时,我们选择打开软件的对话框一样。

  特别注意intent过滤器是应用清单文件的一个表达式,也可以看成是一种模式匹配,它指定该组件接受的intent的类型。

  相比于显式intent,隐式intent则有许多不同,它并不明确指出要启动的哪一个activity,而是要指定一系列更为抽象的action和category等信息,然后交给系统区分析这样intent,并由系统找出合适的activity去启动。

  

<activity android:name="com.example.dya1118.DisplayMessageActivity"
            android:label="@string/DisplayMessage">
            <intent-filter>
                <action       android:name="com.example.dya1118.ACTION_START"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>    
隐式使用intent

  代码中<action>标签中出表明了当前activity可以响应“com.example.dya1118.DisplayMessageActivity",这个action,而<category>标签则包括了一些附加信息,更精确地指明了当前的activity能够相应的intent中还可能带有的category。只要<action>和<category>中的内容同时能够匹配上intent中指定的action和category时,这个activity才能响应应该intent.代码中android.intent.category.DEFAULT,是一种默认类型,在调用startActivity()方法的时候会自动将这个category添加大intent中,所以不许要在指定category。

  隐式intent启动其他程序的activity

  上述的intent都是启动一个程序内的不同的activity, 但是intent还可以启动其他程序的activity,这样方便android多个应用程序之间的功能共享。如我们可以在应用程序中个需要展示一个网页,这是就可以调用系统的浏览器来打开这个网页。代码如下:

  

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=(Button)findViewById(R.id.button1);
        button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub
                Intent intent=new Intent();
                intent.setData(Uri.parse("http://www.163.com"));
                startActivity(intent);
            }
        });
    }
View Code

  代码中setData(),接收一个Uri对象,主要用于指定当前intent正在操作的数据,而这些数据通常都是以字符创的形式传入到Uri.parse()方法中解析产生的。

posted on 2016-11-19 14:11  lichao_normal  阅读(260)  评论(0)    收藏  举报