2016.03-04 学习笔记-Android中隐式Intent 的使用

Android中Intent的使用分为显示Intent和隐式Intent 之前已经介绍过显示Intent的用法了,今天来介绍一下隐式Intent的用发.

当我们在使用一款软件时,如果需要从该软件内部开始拨号或者发短信,则需要通过使用隐式Intent将当前应用的Activity跳转到系统的拨号程序或者发送短信程序.

总之 使用一下两种情况需要使用隐式Intent

1.从当前应用跳转到系统自带应用

2.从当前应用跳转到另一款应用软件中

下面就通过一个例子让大家更好的了解隐式Intent的用法,该程序的功能是使当前应用自动将号码或者短信数据携带跳转至系统拨号和发送短信程序,同时也可以实现直接在当前应用拨打电话和发送短信.下面就将代码贴出

先贴布局文件:activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@drawable/a1"
    tools:context="yang_a20160221dial_sendmessage.exercise.MainActivity" >

    <LinearLayout

         android:layout_width="match_parent"
         android:layout_height="45dp"
         android:layout_marginTop="20dp"
        android:orientation="horizontal" >

        <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
           android:textColor="#CCCCFF"
        android:text="电话号码:" />

        <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
         android:hint="请输入号码"
        android:ems="10" >

        <requestFocus />
    </EditText>

      </LinearLayout>

     <LinearLayout

         android:layout_width="match_parent"
         android:layout_height="45dp"
        android:layout_marginTop="10dp"
        android:orientation="horizontal" >

        <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="短信内容:"
        android:textColor="#CCCCFF"/>

        <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="请输入短信"
        android:ems="10" >

        <requestFocus />
    </EditText>

</LinearLayout>

     <LinearLayout
         android:layout_width="fill_parent"
         android:layout_height="45dp"
         android:orientation="horizontal">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="60dp"
            android:text="打电话"
            android:textColor="#CCFF00"
            android:id="@+id/btn1"/>

         <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="发短信"
             android:textColor="#CCFF00"
            android:id="@+id/btn2"/>

         </LinearLayout>

</LinearLayout>

再贴Java代码:MainActivity.java

  1 package yang_a20160221dial_sendmessage.exercise;
  2
  3 import android.app.Activity;
  4 import android.content.Intent;
  5 import android.net.Uri;
  6 import android.os.Bundle;
  7 import android.telephony.SmsManager;
  8 import android.view.View;
  9 import android.view.View.OnClickListener;
 10 import android.view.View.OnLongClickListener;
 11 import android.view.Window;
 12 import android.widget.Button;
 13 import android.widget.EditText;
 14 import android.widget.Toast;
 15
 16 public class MainActivity extends Activity implements OnClickListener, OnLongClickListener {
 17
 18     private EditText editText1;
 19     private EditText editText2;
 20     private Button btn1;
 21     private Button btn2;
 22
 23     @Override
 24     protected void onCreate(Bundle savedInstanceState) {
 25         super.onCreate(savedInstanceState);
 26         requestWindowFeature(Window.FEATURE_NO_TITLE);
 27         setContentView(R.layout.activity_main);
 28         editText1=(EditText) findViewById(R.id.editText1);
 29         editText2=(EditText) findViewById(R.id.editText2);
 30         btn1=(Button) findViewById(R.id.btn1);
 31         btn2=(Button) findViewById(R.id.btn2);
 32
 33         btn1.setOnClickListener(this);
 34         btn2.setOnClickListener(this);
 35
 36         btn1.setOnLongClickListener(this);
 37         btn2.setOnLongClickListener(this);
 38
 39
 40
 41
 42
 43     }
 44
 45     @Override
 46     public void onClick(View v) {//点击按钮进入拨打电话和编辑短信界面
 47         if (v==btn1) {
 48             Toast.makeText(MainActivity.this, "点击拨号", 0).show();
 49             String action=Intent.ACTION_DIAL;//找到拨号界面
 50             Intent i1=new Intent(action);//创建一个隐式Intent 使其跳转到打电话界面
 51             //携带数据
 52             String number=editText1.getText().toString();
 53             i1.setData(Uri.parse("tel:"+number));//"tel"必须这么写
 54           //StartActivity
 55             startActivity(i1);
 56
 57         }
 58         else if(v==btn2){
 59
 60             Toast.makeText(MainActivity.this,"点击发短信", 0).show();
 61
 62             String action=Intent.ACTION_SENDTO;//ACTION_SENDTO
 63             Intent intent=new Intent(action);//指向编辑短信界面
 64             String number=editText1.getText().toString();//获取电话号码
 65             String content=editText2.getText().toString();//获取短信内容
 66             intent.setData(Uri.parse("smsto:"+number));//将电话号码携带过去
 67             intent.putExtra("sms_body", content);//将短信内容携带过去
 68             startActivity(intent);
 69         }
 70
 71     }
 72
 73     @Override
 74     public boolean onLongClick(View v) {//长按直接拨号和发短信
 75
 76         if (v==btn1) {
 77             Toast.makeText(MainActivity.this, "正在拨号", 0).show();
 78             Intent i2=new Intent(Intent.ACTION_CALL);
 79             String number=editText1.getText().toString();
 80             i2.setData(Uri.parse("tel:"+number));//前缀必须是"tel"指向打电话的界面
 81             startActivity(i2);
 82         }
 83         else if(v==btn2){
 84             Toast.makeText(MainActivity.this,"正在发短信", 0).show();
 85
 86             SmsManager manager=SmsManager.getDefault();
 87             String number=editText1.getText().toString();
 88             String content=editText2.getText().toString();
 89             //text短信内容
 90             //destinationAddress->->目的地地址 电话号码
 91             //service center address->->service center address服务中心
 92             manager.sendTextMessage(number, null, content, null, null);
 93
 94
 95         }
 96         return true;//此事件已经本消费了,不会再出发点击
 97  98
 99  

注意:要调用系统的拨号和发送短信程序需要在AndroidManifest中添加权限,具体代码如下

  <!-- 添加打电话的权限 -->>
    <uses-permission android:name="android.permission.CALL_PHONE"/>

    <!-- 添加打电话的权限 -->>
    <uses-permission android:name="android.permission.SEND_SMS"/>

效果如图所示:

        

时间: 2024-10-25 15:56:39

2016.03-04 学习笔记-Android中隐式Intent 的使用的相关文章

android学习笔记--android启动过程之init.rc文件浅析

1.  init.rc文件结构文件位置:init.c  : /system/core/initinit.rc  : /system/core/rootdir 首先init.rc文件是以模块为单位的,每个模块里的内容都是一起执行的,模块分为3种类型:on.service.import.我们可以看下init.rc文件是怎么写的:1.import import /init.usb.rc import /init.${ro.hardware}.rc import /init.trace.rc 上面的内容

Mina框架的学习笔记——Android客户端的实现

Apache MINA(Multipurpose Infrastructure for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架.当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP 应用程序开发.串口通讯程序(只在最新的预览版中提供),MINA 所支持的功能也在进一步的扩展中.目前正在使用 MINA 的软件包括有:Apache Directory Project.Asyn

[Android学习笔记]Android向下兼

Android向下兼容的思路:使用高版本的API,在运行时判断真实运行平台的API版本,根据不同版本做不同的处理 关键类:Build.class里面定义了API版本相关信息 内部类:VERSION定义当前系统的版本信息,其中包含SDK版本信息Build.VERSION.SDK_INT可以获取到当前运行的系统的SDK版本号 内部类:VERSION_CODES定义了各个版本的枚举信息 适配时: if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONE

[Android学习笔记]Android中多线程开发的一些概念

线程安全: 在多线程的情况下,不会因为线程之间的操作而导致数据错误. 线程同步: 同一个资源,可能在同一时间被多个线程操作,这样会导致数据错误.这是一个现象,也是一个问题,而研究如何解决此类问题的相关工作就叫做线程同步. android中,处理线程同步的手段就是:锁 一般分为公平锁和非公平锁: synchronized(内部锁,互斥锁):synchronized是JVM提供的线程同步机制,如果出现问题,JVM能捕获异常,并释放资源,具体实现机制需要查看JVM源码 synchronized的使用特

学习笔记 Android.mk 自动搜索

最近被Android.mk这东西折腾的一晚,这里记录一下. ios就省心多了,不用管那么多,xcode自己解决了. 文本工具:MACVIM(文本编辑工具 非常好用 能清楚分清tab 和空格,以免编写.mk时出错) 这个文件是向编译器描述源代码文件,便于它去解析. 以下是cocos2dx-3.2新建项目时生成的Android.mk文件 基本语法: "#" 注释 ":="  赋值 "+="  追加 "$"    引用某变量的值 #

android隐式intent使用场景解析

Android 隐式intent相信大家都有用过,大部分场景我们用显式intent已经能满足我们的业务需求,隐式intent大部分都是用来启动系统自带的Activity或Service之类的组件.昨天有个业务场景就是,我在第三方依赖库 module A里面有个Activity A,现在需要在Activity A里面启动 module app里面的Activity B,我想了一下,可以用隐式intent来实现这个功能,而且实现代码最简洁,不用修改或添加其他代码. 隐式intent很简单,首先要在A

学习笔记-----Android的View绘制过程

边看源码边参考别人的博客等,做一下学习笔记. 要了解View的绘制,首先得知道View树的结构:(可以参考http://blog.csdn.net/qinjuning/article/details/7226787) 整个 View 树的绘图流程在ViewRoot.java类的performTraversals()函数展开,其绘制流程如下: 我们从最基本的思路来理解绘图流程:先确定所有View的大小,然后根据布局决定每个View的位置,然后开画! 这里着重关注具体绘图的Draw方法,其绘制流程为

Android 学习笔记(10)—— Intent 基本运用

作者:夏至 欢迎转载,也请保留这段申明,谢谢 最近太忙了,都没什么时间来整理,前9个上传之后格式不对,都没好好整理,以后会抽空整理. Android的通信桥梁 -- Intent . 使用一个activity实在是太简单了,布局上也有限,那我们能不能像我们真机上的一样,一点就跳到另一个界面去了.这里我们就使用Intent,在活动中穿梭.至于为什么学着UI组件,突然跑到这个家伙来,那当然是为下一节做准备啦.除了活动,它还可以是服务或者广播.启动可以下列方法: startActivity(Inten

Android学习笔记三:用Intent串联activity

一:Intent Intent可以理解为 意图. 我们可以通过创建intent实例来定义一个跳转意图,意图包括:要跳转到哪个页面.需要传递什么数据. 然后通过startActivity(intent)来启动跳转. 有两种方式定义Intent:显式Intent.隐式Intent. 二:显式Intent 1)我们可以在actvity的java文件中,通过代码显示定义Intent,参数为:从哪个页面,跳转到哪个页面. Intent intent = new Intent(FirstActivity.t