Android Intent

本文详细介绍了Android中Intent的基本概念、用法及其在不同场景中的应用,包括四大组件之间的交互、显式Intent和隐式Intent的区别、数据传递、网页显示、地图查看、拨打电话、发送短信、邮件、多媒体播放、应用安装与卸载等操作。通过实例解析和代码示例,帮助开发者掌握Intent的高效使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为刚做完天气预报下一个项目还没有开始 组长还没有分配我应该写的部分 所以我就开始不知道干啥呢 刚好有个大三的学姐过来问我这几天有没有在学习 顺便给我指点一下 结果学姐问的问题都很基础都是安卓最基础的知识点 我经常忽略 做东西的时候总是要实现什么才去看什么 所以其实底子很虚 所以决定利用这段时间慢慢看一些基础知识 今天中午看了 一本书还在网上搜到了很多资料 觉得里面写的intent用法很不错 以前我只知道intent可以跳转 可以传数据 现在发现还有很多东西可以实现 所以记录一下

*intent可以作为四大组件的桥梁( 这里再记一下四大组件分别是
Activity 、Service、BroadcastReceiver、ContentProvider。
记记记记记记)*
他是各个组件进行交互的一种重要方式 intent的用法大致可以分为两种显式intent 和隐式intent 首先我们来看一下显式intent 的用法 Intent 有多个构造函数的重载,其中一个是Intent()这个构造函数有两个参数 第一个就是你当前的活动 第二个是你需要启动的目标活动 当然 你的第二个活动必须先注册 啦啦啦 当我们把Intent构造好之后 就可以通过startActivity() 这个方法 将构建好的intent传入这个方法就可以启动目标活动了
说了这么多 来吃下这颗栗子《* 。*》

    Intent intent=new Intent(MainActivity.this,SecondActivity.class);  

    startActivity(intent);  

这种方式来启动的活动我们称之为显式intent 因为意图非常明显嘛
下来还有隐式intent
他则没有明确的指出我们想要启动哪一个活动 而是有一个字符串的东西指定了 action 和category关于category 文末有我搜集的常见的好多个!!需要时可以查阅 比如我们在androidmaniifest文件中对一个 目标activity这样注册

这个活动就自己可以响应很多操作

<activity android:name = ".SecondActivity">
   <intent_filter>
       <action android:name = "com.example.activitytest.ACTION_START"/>
       <category android: name = "android.intent.category.DEFAULT"/>
   </intent_filter>
</activity>

我们当前的Activity 中的点击事件则如下面代码

button.setOnClickListener(new OnClickListener(){
public void onClick(View v){
       Intent intent=new Intent("com.example.activitytest.ACTION_START");  
    startActivity(intent);  
    }
  }
)

当我们点击button的时候 就可以启动目标activity了

注意:每个intent中只能指定一个action 却能指定多个category

下面是一个当前程序可以响应网页的部分

<activity android:name = ".ThirdActivity">
   <intent_filter>
       <action android:name = "android.intent.action.VIEW"/>
       <category android: name = "android.intent.category.DEFAULT"/>
       <date android:scheme = "http"/>
   </intent_filter>
</activity>

我们设置了action是常量值 category指向了默认的值 data标签中我们指定了数据协议必须是http 这个activity就和浏览器一样可以响应网页的操作了 当然也可以通过intent 来实现

intent可以向下一个活动传递数据
用一个简单的栗子来展示一下传递过程

Intent intent = new Intent();  // Activity1
            intent.putExtra("one", num1);  
            intent.putExtra("two", num2);  
            intent.setClass(FirstActivity.this, SecondActivity.class);  
                startActivity(intent);

 Intent intent = getIntent();  //Activity2
        String num1 = intent.getStringExtra("one");  
        String num2 = intent.getStringExtra("two");  
        int ret = Integer.parseInt(num1) + Integer.parseInt(num2);  
        result.setText(ret+"");

当然也可以返回数据给上一个活动
需要在启动activity的时候用这样的方法
startActivityForResult();
但是我还没有用过啦啦啦

下面是我在晚上觉得有一个前辈整理的特别好的地方
所以拿过来留下 以后可以用到

    显示网页:Uri uri = Uri.parse("http://www.google.com");   
    Intent it   = new Intent(Intent.ACTION_VIEW,uri);   
    startActivity(it);   

    显示地图:  
    Uri uri = Uri.parse("geo:38.899533,-77.036476");   
    Intent it = new Intent(Intent.Action_VIEW,uri);   
    startActivity(it);   

    路径规划:  
    Uri uri = Uri.parse("http://maps.google.com/maps?f=d&saddr=startLat%20startLng&daddr=endLat%20endLng&hl=en");   
    Intent it = new Intent(Intent.ACTION_VIEW,URI);   
    startActivity(it);   

    拨打电话:  
    调用拨号程序  
    Uri uri = Uri.parse("tel:xxxxxx");   
    Intent it = new Intent(Intent.ACTION_DIAL, uri);     
    startActivity(it);     
    Uri uri = Uri.parse("tel.xxxxxx");   
    Intent it =new Intent(Intent.ACTION_CALL,uri);   
    要使用这个必须在配置文件中加入<uses-permission id="android.permission.CALL_PHONE" />   




    发送SMS/MMS  
    调用发送短信的程序  

    Intent it = new Intent(Intent.ACTION_VIEW);   
    it.putExtra("sms_body", "The SMS text");   
    it.setType("vnd.android-dir/mms-sms");   
    startActivity(it);    

    发送短信  
    Uri uri = Uri.parse("smsto:0800000123");   
    Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
    it.putExtra("sms_body", "The SMS text");   
    startActivity(it);     

    发送彩信  
    Uri uri = Uri.parse("content://media/external/images/media/23");   
    Intent it = new Intent(Intent.ACTION_SEND);   
    it.putExtra("sms_body", "some text");   
    it.putExtra(Intent.EXTRA_STREAM, uri);   
    it.setType("image/png");   
    startActivity(it);   

    发送Email  
    Uri uri = Uri.parse("mailto:xxx@abc.com");   
    Intent it = new Intent(Intent.ACTION_SENDTO, uri);   
    startActivity(it);   
    Intent it = new Intent(Intent.ACTION_SEND);   
    it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");   
    it.putExtra(Intent.EXTRA_TEXT, "The email body text");   
    it.setType("text/plain");   
    startActivity(Intent.createChooser(it, "Choose Email Client"));     
    Intent it=new Intent(Intent.ACTION_SEND);       
    String[] tos={"me@abc.com"};       
    String[] ccs={"you@abc.com"};       
    it.putExtra(Intent.EXTRA_EMAIL, tos);       
    it.putExtra(Intent.EXTRA_CC, ccs);       
    it.putExtra(Intent.EXTRA_TEXT, "The email body text");       
    it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");       
    it.setType("message/rfc822");       
    startActivity(Intent.createChooser(it, "Choose Email Client"));   

    添加附件  
    Intent it = new Intent(Intent.ACTION_SEND);   
    it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");   
    it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");   
    sendIntent.setType("audio/mp3");   
    startActivity(Intent.createChooser(it, "Choose Email Client"));   

    播放多媒体  
    Intent it = new Intent(Intent.ACTION_VIEW);   
    Uri uri = Uri.parse("file:///sdcard/song.mp3");   
    it.setDataAndType(uri, "audio/mp3");   
    startActivity(it);   
    Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");   
    Intent it = new Intent(Intent.ACTION_VIEW, uri);   
    startActivity(it);  

    Uninstall 程序  
    Uri uri = Uri.fromParts("package", strPackageName, null);   
    Intent it = new Intent(Intent.ACTION_DELETE, uri);   
    startActivity(it);   

    Install 程序  
    Uri installUri = Uri.fromParts("package", "xxx", null);   
    returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);   



    //搜索应用   
    Uri uri = Uri.parse("market://search?q=pname:pkg_name");     
    Intent it = new Intent(Intent.ACTION_VIEW, uri);     
    startActivity(it);     
    //where pkg_name is the full package path for an application     
    //显示指定应用的详细页面(这个好像不支持了,找不到app_id)   
    Uri uri = Uri.parse("market://details?id=app_id");     
    Intent it = new Intent(Intent.ACTION_VIEW, uri);     
    startActivity(it);     
    //where app_id is the application ID, find the ID     
    //by clicking on your application on Market home     
    //page, and notice the ID from the address bar   


    打开另一程序  
    Intent i = new Intent();      
       ComponentName cn = new ComponentName("com.drip.android2",      
                       "com.drip.android2.AndroidSearch");      
             i.setComponent(cn);      
             i.setAction("android.intent.action.MAIN");      
             startActivityForResult(i, RESULT_OK);   

    打开联系人列表  
    <1>                
        Intent i = new Intent();      
        i.setAction(Intent.ACTION_GET_CONTENT);      
        i.setType("vnd.android.cursor.item/phone");      
        startActivityForResult(i, REQUEST_TEXT);      

       <2>      
       Uri uri = Uri.parse("content://contacts/people");      
       Intent it = new Intent(Intent.ACTION_PICK, uri);      
       startActivityForResult(it, REQUEST_TEXT);      
    打开录音机  
    Intent mi = new Intent(Media.RECORD_SOUND_ACTION);      
             startActivity(mi);   

      从gallery选取图片     
    Inten t i = new Intent();    
      i.setType("image/*");      
           i.setAction(Intent.ACTION_GET_CONTENT);      
           startActivityForResult(i, 11);    

    打开照相机  
    <1>Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null);      
              this.sendBroadcast(i);      
        <2>long dateTaken = System.currentTimeMillis();      
             String name = createName(dateTaken) + ".jpg";      
             fileName = folder + name;      
             ContentValues values = new ContentValues();      
             values.put(Images.Media.TITLE, fileName);      
             values.put("_data", fileName);      
             values.put(Images.Media.PICASA_ID, fileName);      
             values.put(Images.Media.DISPLAY_NAME, fileName);      
             values.put(Images.Media.DESCRIPTION, fileName);      
             values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);      
             Uri photoUri = getContentResolver().insert(      
                       MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);      

             Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);      
             inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);      
             startActivityForResult(inttPhoto, 10);    

    播放多媒体  
    Intent it = new Intent(Intent.ACTION_VIEW);      
    Uri uri = Uri.parse("file:///sdcard/song.mp3");      
    it.setDataAndType(uri, "audio/mp3");      
    startActivity(it);      

    或者     
    Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, "1");        
    Intent it = new Intent(Intent.ACTION_VIEW, uri);        
    startActivity(it);      

    或者     
    Uri playUri = Uri.parse("file:///sdcard/download/everything.mp3");     
    returnIt = new Intent(Intent.ACTION_VIEW, playUri);     
    发送Email  
    Uri uri = Uri.parse("mailto:xxx@abc.com");  
    Intent it = new Intent(Intent.ACTION_SENDTO, uri);  
    startActivity(it);  

    或者:  
    Intent intent = new Intent(Intent.ACTION_SEND);  
    intent.putExtra(Intent.EXTRA_EMAIL, address);  
    intent.putExtra(Intent.EXTRA_SUBJECT, filename);  
    intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + filename)); ;  
    intent.setType("text/csv");  
    startActivity(Intent.createChooser(intent, "EMail File"));  

    或者:  
    Intent it = new Intent(Intent.ACTION_SEND);  
    it.putExtra(Intent.EXTRA_EMAIL, "me@abc.com");  
    it.putExtra(Intent.EXTRA_TEXT, "The email body text");  
    it.setType("text/plain");  
    startActivity(Intent.createChooser(it, "Choose Email Client"));  

    或者:  
    Intent it=new Intent(Intent.ACTION_SEND);  
    String[] tos={"me@abc.com"};  
    String[] ccs={"you@abc.com"};  
    it.putExtra(Intent.EXTRA_EMAIL, tos);  
    it.putExtra(Intent.EXTRA_CC, ccs);  
    it.putExtra(Intent.EXTRA_TEXT, "The email body text");  
    it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  
    it.setType("message/rfc822");  
    startActivity(Intent.createChooser(it, "Choose Email Client"));  

    或者:  
    Intent it = new Intent(Intent.ACTION_SEND);  
    it.putExtra(Intent.EXTRA_SUBJECT, "The email subject text");  
    it.putExtra(Intent.EXTRA_STREAM, "file:///sdcard/mysong.mp3");  
    sendIntent.setType("audio/mp3");  
    startActivity(Intent.createChooser(it, "Choose Email Client"));  

     后台发送短信  
    注册权限  
    <uses-permission android:name="android.permission.SEND_SMS" />  
    代码实现 :  
    // 获取信息内容  
    String message ;  
    // 移动运营商允许每次发送的字节数据有限,我们可以使用Android给我们提供 的短信工具。  
    if (message != null) {  
    SmsManager sms = SmsManager.getDefault();  
    // 如果短信没有超过限制长度,则返回一个长度的List。  
    List<String> texts = sms.divideMessage(message);  
    for (String text : texts) {  
    sms.sendTextMessage(“这里是接收者电话号码”,  “这里是发送者电话号码”,  “这里是短信内容”,  null, null);  
    }  
    }  
    //说明  
    sms.sendTextMessage(destinationAddress, scAddress, text, sentIntent, deliveryIntent):  
    destinationAddress:接收方的手机号码  
    scAddress:发送方的手机号码  
    text:信息内容  
    sentIntent:发送是否成功的回执,  
    DeliveryIntent:接收是否成功的回执,  

    从google搜索内容  
    Intent intent = new Intent();      
    intent.setAction(Intent.ACTION_WEB_SEARCH);      
    intent.putExtra(SearchManager.QUERY,"searchString")      
    startActivity(intent);    

[java] view plain copy

    APK 安装  
    Intent intent =new Intenet();  

    String filepath="/SDCard/XXX.apk";  

category的作用:提供将要执行的action的额外信息,一般在隐式地启动activity时需要用到。常见的category如下:

[html] view plaincopyprint?
CATEGORY_ALTERNATIVE
设置这个activity是否可以被认为是用户正在浏览的数据的一个可选择的action

CATEGORY_APP_BROWSER
和ACTION_MAIN一起使用,用来启动浏览器应用程序

CATEGORY_APP_CALCULATOR
和ACTION_MAIN一起使用,用来启动计算器应用程序

CATEGORY_APP_CALENDAR
和ACTION_MAIN一起使用,用来启动日历应用程序

CATEGORY_APP_CONTACTS
和ACTION_MAIN一起使用,用来启动联系人应用程序

CATEGORY_APP_EMAIL
和ACTION_MAIN一起使用,用来启动邮件应用程序

CATEGORY_APP_GALLERY
和ACTION_MAIN一起使用,用来启动图库应用程序

CATEGORY_APP_MAPS
和ACTION_MAIN一起使用,用来启动地图应用程序

CATEGORY_APP_MARKET
这个activity允许用户浏览和下载新的应用程序

CATEGORY_APP_MESSAGING
和ACTION_MAIN一起使用,用来启动短信应用程序

CATEGORY_APP_MUSIC
和ACTION_MAIN一起使用,用来启动音乐应用程序

CATEGORY_BROWSABLE
能够被浏览器安全调用的activity必须支持这个category

CATEGORY_DEFAULT
设置这个activity对于默认的action是否是一个可选的

CATEGORY_EMBED
可以运行在父activity容器内

CATEGORY_HOME
主activity,当应用程序启动时,它是第一个显示的activity

CATEGORY_LAUNCHER
应该在上层的启动列表里显示

CATEGORY_MONKEY
这个activity可能被monkey或者其他的自动测试工具执行

CATEGORY_OPENABLE
用来指示一个GET_CONTENT意图只希望ContentResolver.openInputStream能够打开URI

CATEGORY_PREFERENCE
这个activity是一个选项卡

CATEGORY_SAMPLE_CODE
作为一个简单的代码示例使用(一般情况下不使用)

CATEGORY_SELECTED_ALTERNATIVE
设置这个activity是否可以被认为是用户当前选择的数据的一个可选择的action

CATEGORY_TAB
想要在已有的TabActivity内部作为一个Tab使用

CATEGORY_TEST
供测试使用(一般情况不使用)

CATEGORY_UNIT_TEST
联合测试使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值