Intent 的基本含义。

Intent基本含义:是用来通知平台 (唤起)处理动作,其动作做什么 取决于 注册了什么动作。例如一个简单的MainActivity. AndroidManifest.xml就注册了相应的动作,允许其他应用唤起该Activity。

Intent的构成:

Intent可以带有action,data(由URI表达),extra
data(key/value map,键值对),指定的类名(成为component name)。一个intent至少携带上述的一个内容。

action: 可以有两种形式,一种是系统自带的,一种是我们在androidManifest.xml 中开发时注册的。

系统自带的intent:

在讲之前说一下知识点:OptionMenu

 在手机上,有一个Menu按钮,按下后,可以显示OptionMenu,如下处理

 publice boolean onCreateOptonsMenu(Menu menu){

    menu.add(0,1,1,R.string.menu_exit);
       
    menu.add(0,2,2,R.string.menu_about);

 }

add(int groupId, int itemId, int order, int titleRes),对于exit的menuItem,0表示GroupId,1表示ItemId,这两个Id将用于Menu按下后触发回调函数中用于判断具体是哪个menuItem,第三个表示拜访的顺序,在这里第一个是exit,第二个是about,第四个参数引向strings.xml中定义的内容。

创建的Menu后,需要触发回调函数,这也是一个override的方法,如下处理:

public boolean onOptionsItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        if(item.getItemId() == 1){
//在这个例子中我们只有一个group,所有只需检查itemId就可以了。

            finish();
        }else if(item.getItemId() == 2){
            ... ...
        }
        return super.onOptionsItemSelected(item);

 

 

让我们来看看有那些系统的Intent.

1.

 private void invokeBrowser(){
        Intent intent = new Intent(Intent.ACTION_VIEW); //触发浏览器打开指定网页
        intent.setData(Uri.parse("http://www.google.com.hk"));                 
        startActivity(intent);
    }  


    private void invokeSearch(){
        Intent intent = new Intent(Intent.ACTION_WEB_SEARCH); 
        intent.setData(Uri.parse("http://www.google.com.hk")); 
        startActivity(intent);
    }

实际也是触发浏览器,不过名曰网络搜索,和上面ACTION_VIEW不同,运行传递的data为””(empty string),因为ACTION_VIEW对应多个可能的应用,而WEB_SEARCH只对应browser。

2.       

private void invokeDial(){ 
        Intent intent = new Intent(Intent.ACTION_DIAL); //打开拨号盘UI,
        startActivity(intent);       
    }

3.   

 private void invokeCall(){ 
        Intent intent = new Intent(Intent.ACTION_CALL);// 打开拨号盘UI,同时呼出tel:phone_number,和ACTION_DIAL的需要用户按拨打键不同,ACTION_CALL直接呼出,需要授权android.permission_CALL_PHONE
        intent.setData(Uri.parse("tel:02012345678")); 
        startActivity(intent);       
    }
    

等等 还有很多相关的系统Intent..可以自行baidu一下。

本文实例:

点击 menu按键:                                        点击图片中“网页”

 

 

 

再来看 一下mainactivity.java:

 

package com.example.intentd;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
    // 这里重载了onCreateOptionMenu();方法
    public boolean onCreateOptionsMenu(Menu menu) { 
     menu.add(Menu.NONE, Menu.FIRST + 1, 1, "网页").setIcon(android.R.drawable.ic_menu_send); 
     
        return true;
    } 
    public boolean onOptionsItemSelected(MenuItem item) { 
            switch(item.getItemId()){
            case Menu.FIRST  + 1: 
             invokeSearch();
            default: 
                Log.d("pro","get option error.");
                break;
            }
        return true;
    }
    private void invokeSearch(){
        Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
        intent.setData(Uri.parse("http://www.google.com.hk"));
        startActivity(intent);
    }

}

接下来的是:需要注册的是Activity,注册方法:在androidManifest.xml 里添加一个activity标签,如<activity android:name=".AActivity"/> 注意小数点。

通过给出该Component的的package name和class name来进行调用。下面我们试验采用四种类似的方式进行调用,本质是一样的。

方式1:setComponent(ComponentName name);

方式2:setClassName(String packageName, String classNameInThatPackage); 

方式3:setClassName(Context context, String classNameInThatContext);

方式4:也是常用的setClass(Context context, Class classObjectInThatContext);

private void basicTest4(){
    Intent intent = new Intent(); 
    intent.setClass(this,IntentBasicViewActivity.class); 
    startActivity(intent);
}

 

Data。由不同action决定有效的URI的格式。intent.setData(Uri.parse(”xxxxxx”));。被唤起的activity可以同activity.getIntent()来获得intent,然后通该intent的getData()来获取数据。


//触发方。 
Intent i = new
Intent(actionName);
String uriStr = "wei://www.flowingflying.com";
i.setData(Uri.parse(uriStr));
this.startActivity(i);
/被触发方。需要在AndroidManifest.xml中在intent-filter中注册data信息,后文详细说明
Intent
intent = this.getIntent();
String data = intent.getData();  


 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://my.oschina.net/u/1773495/blog/306082

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值