`
trygood
  • 浏览: 78064 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Intent打电话

阅读更多
intent英文意思是意图,pending表示即将发生或来临的事情。
PendingIntent这个类用于处理即将发生的事情。比如在通知Notification中用于跳转页面,但不是马上跳转。
Intent 是及时启动,intent 随所在的activity 消失而消失。
PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,
当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中
保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent,
就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行
后的操作。常和alermanger 和notificationmanager一起使用。
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据。
而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。

一、什么是Intent:
在一个Android应用中,Intent是对执行某个操作的一个抽象描述,Intent 负责提供组件之间相互调用的相关信息传递,实现调用者和被调用者之间的解耦。
二、Intent的属性:
Intent是对执行某个操作的一个抽象描述,其描述的内容包括,对执行动作Action的描述、对操作数据的描述、还有4种附加属性的描述。分别介绍如下:

Action ,对执行动作的描述,是个字符串,是对所将执行的动作的描述,在Intent类中定义了一些字符串常量作为标准动作,譬如:
1 public static final String ACTION_DIAL = "android.intent.action.DIAL"
2 public static final String ACTION_SENDTO = "android.intent.action.SENDTO";
我们还可以自定义Action,并定义相应的Activity来处理我们自定义的行为。
data ,是对执行动作所要操作的数据的描述,Android中采用URI来表示数据,譬如在联系人应用中,指向联系人1的URI可能为:content://contacts/1 (由content provider提供的数据类型是content) 。 结合Action和data可以基本表达出意图,
• VIEW_ACTION content://contacts/1 — 显示标识符为”1″的联系人的详细信息
• EDIT_ACTION content://contacts/1 — 编辑标识符为”1″的联系人的详细信息
• VIEW_ACTION content://contacts/ — 显示所有联系人的列表
• PICK_ACTION content://contacts/ — 显示所有联系人的列表,并且允许用户在列表中选择一个联系人,然后把这个联系人返回给父activity。例如:电子邮件客户端可以使用这个 Intent,要求用户在联系人列表中选择一个联系人。
除了Action和data之外,还有4个属性。
catagory 类别,是被请求组件的额外描述信息,Intent类中也定义了一组字符串常量表示Intent不同的类别。完整的列表可以看API文档中Intent类的相应部分。
1 public static final String CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER";
2 public static final String CATEGORY_PREFERENCE ="android.intent.category.PREFERENCE";
extra 附加信息,除了data之外,还可以通过extra附加信息,extra属性使用Bundle类型进行数据传递,我们可以把Bundle当做HashMap来理解,附加数据可以通过 intent.putExtras() 和 intent.getExtras() 进行传入和读取。 就像这样,获取附加信息: Bundle bundle = intent.getExtras();
添加附加信息: Bundle bundle = new Bundle(); intent.putExtras(bundle);
component 组件,显式指定Intent的目标组件的名称。如果指定了component属性,系统会直接使用它指定的组件,而非匹配查找。
type 数据类型,显式指定Intent的数据类型,一般Intent的数据类型都能够根据数据本身进行判定,但是通过设置这个属性,可以强制采用显式指定的类型和不再进行推导。
三、解析Intent
Intent是一种在不同组件之间传递的请求信息,是应用程序发出的请求和意图,作为一个完整的消息传递机制,Intent不仅需要发送端,还需要接收端。
当指定了component属性后,就是显式的指定了目标组件,也就是接收端。如果没有明确指定目标组件,那么Android系统会使用 Intent 里的(action,data,category)三个属性来寻找和匹配接收端。
四、IntentFilter
应用程序组件可以使用IntentFilter来向系统说明自己可以响应和处理那些Intent请求。组件一般通过AndroidManifest.xml文件的<Intent-Filter>描述。
<activity android:name=”.MainTinyPhone” android:label=”@string/app_name”>
<intent-filter>
<action android:name=”android.intent.action.MAIN” />
<category android:name=”android.intent.category.LAUNCHER” />
</intent-filter>
</activity>
五、简单的拨打电话的例子
这是一个简单的拨打电话的程序,它可以截获手机上的拨号按键发出的请求,自己输入号码,并把数据传给系统的打电话程序,从而实现打电话功能。
先上效果图:
按绿色的拨号按钮的时候会呼出一个菜单让你选择使用哪个拨号程序,

我们选择简单拨号程序,出现输入框可以填写电话号码,并拨号

点击拨号后,调用了系统的拨号程序。

最终实现了拨号:

再上代码,MainTinyDial.java的代码:
01 package andorid.basic.lesson8;
02
03 import android.app.Activity;
04 import android.content.Intent;
05 import android.net.Uri;
06 import android.os.Bundle;
07 import android.view.View;
08 import android.widget.Button;
09 import android.widget.EditText;
10
11 public class MainTinyDial extends Activity {
12     /** Called when the activity is first created. */
13     @Override
14     public void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16
17         // 按照main.xml來渲染用戶界面
18         setContentView(R.layout.main);
19
20         // 找到存放电话号码的可编辑文本框
21         final EditText PhoneNumberEditText = (EditText) findViewById(R.id.PhoneNumberEditText);
22
23         // 找到拨号按钮
24         Button button = (Button) findViewById(R.id.Button01);
25
26         // 为拨号按钮设置一个点击事件观察者
27         button.setOnClickListener(new Button.OnClickListener() {
28             //实现监听器接口的匿名内部类,其中监听器本身是View类的内部接口
29
30             //实现接口必须实现的onClick方法
31             @Override
32             public void onClick(View v) {
33                 // 获得可编辑文本框中的值,也就是电话号码
34                 String phoneNumber = PhoneNumberEditText.getText().toString();
35                 // new Intent(行为,数据),其中action_dial是拨号行为,数据是电话号码
36                 Intent intent = new Intent(Intent.ACTION_DIAL, Uri
37                         .parse("tel://" + phoneNumber));
38                 // 去调用那些可以处理拨号行为的Activity
39                 startActivity(intent);
40             }
41         });
42
43     }
44 }
界面布局的main.xml代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="请输入电话号码:"
android:textSize="15sp" />
<EditText android:text="5556"
android:id="@+id/PhoneNumberEditText"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</EditText>
<Button android:text="拨号"
android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</Button>
</LinearLayout>
界面布局的Strings.xml代码
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello World, MainTinyDial!</string>
    <string name="app_name">简单拨号程序</string>
</resources>

程序总体设置的AndroidManifest.xml的代码:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="andorid.basic.lesson8"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainTinyDial"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
                <intent-filter>
                <action android:name="android.intent.action.CALL_BUTTON" ></action>
                <category android:name="android.intent.category.DEFAULT"></category>
                </intent-filter>
                </activity>
    </application>
    <uses-sdk android:minSdkVersion="8" />

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-permission android:name="android.permission.CALL_PRIVILEGED"></uses-permission>
</manifest>
Android.permission.CALL_PHONE:允许程序传入电话拨号直接拨号,不需要通过用户界面确认
android.permission.CALL_PRIVILEGED:允许程序将电话号码传给拨号程序,需要用户确认好才会拨出电话




另一个例子

通过Intent的方式,可将电话号码带给内置的拨号程序,再由内置的拨号程序运行拨出电话的工作。利用StartActivity()方法,将程序的焦点交给手机内置的拨号程序,原来的Activity就会变成失焦的状态,且会发生onPause()事件,知道User关闭拨号程序,让焦点再交会原来 的Activity(发生onResume()事件)。
下面程序使用一个Button,但单机按钮时,调用手机默认的拨号画面,此按钮的功能等同于单击手机上的“拨出”按钮,不过此程序只是带出拨号的画面。
下面沿用我的习惯,先贴出布局页面(onebutton.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button  
android:id="@+id/Button01"
android:text="@string/click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Button>
</LinearLayout>

主程序页面CallTest.java
package test.shi;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.*;

public class CallTest extends Activity implements OnClickListener {

private Button button1;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

//设置页面布局
setContentView(R.layout.onebutton);

button1 = (Button) findViewById(R.id.Button01);

//设置按钮的监听
button1.setOnClickListener(this);
}

private void goToCall()
{
/*下面两句的作用一样*/
//Intent intent=new Intent("android.intent.action.CALL_BUTTON");
Intent intent=new Intent(Intent.ACTION_CALL_BUTTON);
startActivity(intent);
}


@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub

switch (arg0.getId()) {
case R.id.Button01://如果单击的是Button01,执行操作
goToCall();
break;
}
}

}
权限

<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>
<uses-permission android:name="android.permission.CALL_PRIVILEGED"></uses-permission>

Android.permission.CALL_PHONE:允许程序传入电话拨号直接拨号,不需要通过用户界面确认
android.permission.CALL_PRIVILEGED:允许程序将电话号码传给拨号程序,需要用户确认好才会拨出电话。
分享到:
评论

相关推荐

    使用Intent拨打电话.zip

    在这个名为"使用Intent拨打电话.zip"的压缩包中,我们可以看到一个针对如何使用Intent来拨打电话的示例。下面将详细解释Intent的工作原理以及如何实现拨打电话的功能。 首先,Intent是一个对象,它包含了启动一个...

    Android利用Intent拍照、摄像、打电话、发短信、发邮件等示例

    本资源“Android利用Intent拍照、摄像、打电话、发短信、发邮件等示例”提供了一个完整的应用实例,展示了如何灵活运用Intent来实现这些功能。下面将详细解释每个功能的实现方式。 1. **拍照** 使用Intent来调用...

    运用Android Studio实现打电话和发短信

    打电话功能通常通过`Intent`实现,创建一个带有拨号动作的`Intent`,然后使用`startActivity()`启动。以下是如何实现拨打电话的示例代码: ```java String phoneNumber = "1234567890"; Intent callIntent = new ...

    Android Studio Intent隐式启动,发短信,拨号,打电话,访问网页等实例代码

    本文将详细介绍如何在Android Studio中使用Intent进行隐式启动,实现发短信、拨号、打电话以及打开网页的功能。 首先,我们来看一下隐式启动Intent。隐式启动不指定具体的目标组件,而是通过设置Action、Data、...

    Android中Intent使用、数据回写(显)

    - ACTION:常见的ACTION有ACTION_VIEW(查看数据)、ACTION_CALL(拨打电话)等,开发者可以根据需求自定义ACTION。 6. **IntentFilter与隐式Intent** - 为了响应隐式Intent,需要在AndroidManifest.xml中为组件...

    Android 常用的Intent的URI及示例

    Intent.ACTION_CALL 是一种常用的 Intent 动作,用于直接拨打电话。例如,下面的代码将直接拨打电话: Uri uri = Uri.parse("tel:10086"); Intent intent = new Intent(Intent.ACTION_CALL, uri); 五、卸载一个...

    安卓小程序(打电话,发短信)

    在安卓平台上,开发一款能够实现打电话和发送短信的小程序是一项基础但重要的技能。这个小程序针对的是安卓6.0及以上版本的系统,意味着它需要遵循安卓 Marshmallow (API 级别23) 及以上版本的开发规范。下面将详细...

    rect native android IntentAndroid 拨打电话

    http://blog.csdn.net/u013148839/article/details/50176401

    Android打电话源码

    在Android系统中,实现...总结来说,Android打电话源码涵盖了从应用层的`Intent`调用到系统服务的处理,再到与硬件的交互等多个层次。理解这一过程不仅有助于开发拨打电话功能,也能加深对Android系统工作原理的认识。

    打电话.rar

    在IT行业中,打电话功能是移动应用开发中的一个基础部分,特别是在Android和iOS平台上。这个"打电话.rar"压缩包文件可能包含了一个简易的项目,旨在帮助新手理解如何在应用程序中实现打电话的功能。下面将详细讲解这...

    Android信使intent学习源码,实现打电话,发短信

    NULL 博文链接:https://cndemoz.iteye.com/blog/1169575

    android Intent实例

    调拨打电话界面 ```java Uri telUri = Uri.parse("tel:100861"); Intent returnIt = new Intent(Intent.ACTION_DIAL, telUri); ``` 这将打开电话拨打界面,并预填充电话号码“100861”。用户可以选择拨出电话或者...

    Android通讯录姓名手机号获取,打电话发短信功能。

    关于打电话功能,你可以使用Intent来启动系统的电话拨打界面或直接拨打电话: ```java // 启动拨号界面 Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:" + phoneNumber)); start...

    android实现打电话功能

    //拔打电话号码 //"android.intent.action.CALL" Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ mobile)); startActivity(intent);//内部会添加android.intent.category.DEFAULT

    Iandroid Intent使用案例

    android Intent使用案例 含:播放多媒体、打电话、发短信、发送email、发邮件、google服务、组件component、action值自定义、显示地图/路径规划、选择应用、打开应用列表、搜索应用等意图实例。

    安卓应用之Intent的使用

    打电话: 1.界面使用linearlayout布局添加电话号码和短信内容输入框,定义button控件 2.在Activity中初始化需要操作的视图对象 3给button设置点击监听 5.点击打电话进入拨号界面 1)创建一个Intent 2)携带数据 3). ...

    Android实现打电话和发短信

    在Android应用开发中,有时需要集成打电话和发送短信的功能,以提供更丰富的用户体验。下面将详细解释如何在Android中实现这两个功能。 ### 调用系统拨号盘打电话 #### 跳转到拨号盘 ```java Intent intent = new ...

    安卓打电话到10086的例子

    在这个“安卓打电话到10086的例子”中,我们将探讨如何使用Android SDK中的Intent类来实现这一功能。Intent是Android系统中一个非常重要的概念,它用于在组件之间传递消息,比如启动一个新的Activity或者启动一个...

    Android代码-定时打电话功能源码.zip

    在Android平台上实现定时打电话的功能,涉及到的是Android系统级别的编程,主要使用到的是AlarmManager服务、Intent和BroadcastReceiver等组件。接下来我们将深入探讨这些关键知识点。 首先,`AlarmManager`是...

    跳转到打电话,发短信的界面以及直接打电话发短信

    在Android和iOS等移动操作系统中,开发者经常需要集成打电话和发送短信的功能,以便用户可以直接从应用程序内进行这些操作。本文将详细讲解如何实现"跳转到打电话、发短信的界面"以及"直接打电话发短信"的技术细节。...

Global site tag (gtag.js) - Google Analytics