android拨号器:
拨打电话的关键:
(1)在AndroidManifest中添加users-permission,并声明使用权限:
(2)<uses-permission android:name="android.permission.CALL_PHONE" />这是由于拨打电话属于手机底层的服务,与用户隐私及通话费等相关,因此,程序必须取得相关权限。
(2)通过Intent对象,带入“ACTION_CALL”这个关键词,以及通过Uri.parse()方法将用户要拨打的电话号码带入。 注意传入的Uri的数据,电话的prefix为“tel:”。
(3)最后以startActivity()方法(将自定义的Intent传入),即可完成通过程序直拨打电话。
山寨iphone的拨号界面:
一共有十六个个ImageButton,其中
表示新建联系人,点击可跳转至手机自带的新建联系人界面,同时会传入拨号界面输入的号码
点击时为右图
表示退格,即点击后会删除上一次输入的一个数字 点击时为右图
左边为各种输入按钮,右边为点击时该按钮出现的状态
拨号按钮 点击后会跳转至拨打电话界面(拨打上方输入的号码) 点击时为右图
发短信按钮 点击后会跳转至发短信界面(下图) 点击时为右图
发送短信界面 第一个框输入联系人电话 第二个框输入信息内容 点击发送按钮即可发送短信
拨号界面代码:
<?xml version="1.0" encoding="utf-8"?> <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="match_parent" android:orientation="vertical" tools:context="com.example.nono.callactivity" > <RelativeLayout android:layout_width="match_parent" android:layout_marginTop="20dp" android:layout_height="62dp" > <ImageButton android:id="@+id/imageButton14" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_marginTop="20dp" android:layout_marginRight="30dp" android:background="#00000000" android:onClick="delete" android:src="@drawable/deleteselect" /> <TextView android:id="@+id/textView1" android:layout_width="227dp" android:layout_height="50dp" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true" android:gravity="center" android:textSize="30dp" /> <ImageButton android:id="@+id/imageButton16" android:layout_width="wrap_content" android:layout_height="40dp" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" android:layout_marginLeft="30dp" android:onClick="add" android:background="#00000000" android:src="@drawable/addselect" /> </RelativeLayout> <TableLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <TableRow android:padding="10dp" android:gravity="center_horizontal" android:id="@+id/tableRow1" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageButton android:id="@+id/imageButton1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="digital_click" android:background="#00000000" android:src="@drawable/oneselect" android:tag="1" /> <ImageButton android:id="@+id/imageButton2" android:layout_marginLeft="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="digital_click" android:background="#00000000" android:src="@drawable/twoselect" android:tag="2" /> <ImageButton android:id="@+id/imageButton3" android:layout_marginLeft="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="digital_click" android:background="#00000000" android:src="@drawable/threeselect" android:tag="3" /> </TableRow> <TableRow android:padding="10dp" android:gravity="center_horizontal" android:id="@+id/tableRow2" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageButton android:id="@+id/imageButton4" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00000000" android:onClick="digital_click" android:src="@drawable/fourselect" android:tag="4" /> <ImageButton android:id="@+id/imageButton5" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:background="#00000000" android:onClick="digital_click" android:src="@drawable/fiveselect" android:tag="5" /> <ImageButton android:id="@+id/imageButton6" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:background="#00000000" android:onClick="digital_click" android:src="@drawable/sixselect" android:tag="6" /> </TableRow> <TableRow android:padding="10dp" android:gravity="center_horizontal" android:id="@+id/tableRow3" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageButton android:id="@+id/imageButton8" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00000000" android:onClick="digital_click" android:src="@drawable/sevenselect" android:tag="7" /> <ImageButton android:id="@+id/imageButton9" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:background="#00000000" android:onClick="digital_click" android:src="@drawable/eightselect" android:tag="8" /> <ImageButton android:id="@+id/imageButton10" android:layout_width="wrap_content" android:layout_marginLeft="20dp" android:layout_height="wrap_content" android:background="#00000000" android:onClick="digital_click" android:src="@drawable/nineselect" android:tag="9" /> </TableRow> <TableRow android:padding="10dp" android:gravity="center_horizontal" android:id="@+id/tableRow4" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageButton android:id="@+id/imageButton7" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00000000" android:onClick="digital_click" android:src="@drawable/xselect" android:tag="*" /> <ImageButton android:id="@+id/imageButton11" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:background="#00000000" android:onClick="digital_click" android:src="@drawable/zeroselect" android:tag="0" /> <ImageButton android:id="@+id/imageButton12" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:background="#00000000" android:onClick="digital_click" android:src="@drawable/tenselect" android:tag="#" /> </TableRow> <TableRow android:padding="10dp" android:gravity="center_horizontal" android:id="@+id/tableRow5" android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageButton android:id="@+id/imageButton13" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00000000" android:onClick="dial" android:src="@drawable/callselect" /> <ImageButton android:id="@+id/imageButton15" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#00000000" android:layout_marginLeft="50dp" android:onClick="sendmess" android:src="@drawable/messageselect" /> </TableRow> </TableLayout> </LinearLayout>
其中图片按钮地址为android:src="@drawable/*select"
这是一个xml文件 里面是这样定义的:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="false" android:drawable="@drawable/add" /> <item android:state_pressed="true" android:drawable="@drawable/addc" /> </selector>
作用是 没有点击时会显示第一张图片(state_pressed="false")
点击时会显示第二张图片(android:state_pressed="true")
发送短信界面代码:
<?xml version="1.0" encoding="utf-8"?> <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="match_parent" android:orientation="vertical" tools:context="com.example.nono.sendmessactivity" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <EditText android:id="@+id/phone" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_toRightOf="@+id/textView1" android:ems="10" > <requestFocus /> </EditText> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:text="联系人:" /> </RelativeLayout> <EditText android:id="@+id/mess" android:gravity="top" android:layout_width="match_parent" android:layout_height="300dp" android:layout_weight="0.00" android:ems="10" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:text="发送" android:background="#4CD964" android:layout_marginTop="29dp" android:onClick="send" android:textColor="#ffffff" /> </RelativeLayout> </LinearLayout>
就是两个输入框及一个按钮的定义
功能方面
新建联系人
public void add(View view){ //新建联系人 Intent it = new Intent(Intent.ACTION_INSERT,Uri.withAppendedPath(Uri.parse("content://com.android.contacts"),"contacts" )); it.setType("vnd.android.cursor.dir/person"); String number = textResult.getText().toString(); it.putExtra(android.provider.ContactsContract.Intents.Insert.SECONDARY_PHONE,number); startActivity(it); }
该方法的作用是将输入的号码传给手机自带的新建联系人,这里主要涉及到跳转传值
网上搜了一下传值方法:
如果数据比较少,比如只要传一个名字,那么只要j加一句"intent.putExtra("Name", "android");"即可,代码如下:
Intent intent = new Intent(); intent.setClass(A.this, B.class); intent.putExtra("Name", "android"); startActivity(intent);
如果数据比较多,就需要使用 Bundle类了,代码如下:
Intent intent = new Intent(A.this, B.class); /* 通过Bundle对象存储需要传递的数据 */ Bundle bundle = new Bundle(); /*字符、字符串、布尔、字节数组、浮点数等等,都可以传*/ bundle.putString("Name", "feng88724"); bundle.putBoolean("Ismale", true); /*把bundle对象assign给Intent*/ intent.putExtras(bundle); startActivity(intent);
下一个页面接收数据:
在A页面上是以Bundle封装了对象,自然在B页面也是以Bundle的方式来解开封装的数据。主要通过"getIntent().getExtras()"方法来获取Bundle,然后再从Bundle中获取数据。 也可以通过" this.getIntent().getStringExtra("Name");"方法直接从Intent中获取数据。
从Bundle获取数据的代码:
/*获取Intent中的Bundle对象*/ Bundle bundle = this.getIntent().getExtras(); /*获取Bundle中的数据,注意类型和key*/ String name = bundle.getString("Name"); boolean ismale = bundle.getBoolean("Ismale");
拨号器数字输入:
public void digital_click(View view){ //点击按钮 ImageButton btnDigital=(ImageButton) view; String text=btnDigital.getTag().toString(); currentNum.append(text); display(); } public void display(){ //输入号码的显示 textResult.setText(currentNum.toString()); }
digital_click是与所有输入按钮绑定的方法
通过按钮的tag的值来判断是哪一个按钮的触发
将数字存入currentNum(StringBuffer)中
再通过display()显示输入的值
删除输入数字:
public void delete(View view){ //删除输入数字 if(currentNum.length()>=1){ currentNum.delete(currentNum.length()-1, currentNum.length()); } if(currentNum.length()==0){ Toast toast=Toast.makeText(this,"请输入号码",100); toast.show(); display(); } textResult.setText(currentNum); }
删除currentNum中的最后一位输入,并更新显示的数据
拨打电话:
public void dial(View view) {//拨打电话触发 String number=textResult.getText().toString(); Intent intent = new Intent(); intent.setAction(intent.ACTION_CALL); intent.setData(Uri.parse("tel:"+number)); startActivity(intent);//方法内部会自动为Intent添加类别: android.intent.category.DEFAULT }
发送短信:
1)跳转至发送短信界面
public void sendmess(View view){//跳转至发送短信界面 Intent intent = new Intent(); intent.setClass(callactivity.this, sendmessactivity.class); intent.putExtra("number", textResult.getText().toString()); startActivity(intent); }
跳转传值
2)发送
public void send(View v){ content=edit.getText().toString(); SmsManager smsManager = SmsManager.getDefault(); PendingIntent sentIntent = PendingIntent.getActivity(this, 0, super.getIntent(), PendingIntent.FLAG_UPDATE_CURRENT); if (content.length() > 70) { // 大于70个字,拆分 List<String> msgs = smsManager.divideMessage(content); // 拆分 Iterator<String> iter = msgs.iterator(); while (iter.hasNext()) { String msg = iter.next(); smsManager.sendTextMessage("10086", null, msg, sentIntent, null); } } else { smsManager.sendTextMessage(phonenumber.getText().toString(), null, content, sentIntent, null); } Toast.makeText(this, "短信发送完成", Toast.LENGTH_SHORT).show(); }
发送短信核心代码:
(1)SmsManager manager = SmsManager.getDefault(); //获得默认的消息管理器
(2)ArrayList<String> list = manager.divideMessage(String txt); //拆分长短信
(3)manager.sendTextMessage(String phone,null,String content,null,null); //发送短信
涉及到的权限:
<uses-permission android:name="android.permission.CALL_PHONE"/> <uses-permission android:name="android.permission.SEND_SMS"></uses-permission> <uses-permission android:name="android.permission.READ_SMS"></uses-permission> <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission>
上传的nono.rar是拨号器apk文件的压缩包,欢迎大家下载使用
相关推荐
Android应用开发之拨号器和短信发送器的代码实现
综上所述,这个"android拨号器与短信器功能的小软件源码"项目涵盖了Android应用开发的多个核心方面,对于理解Android系统的运作机制和提升开发者技能非常有帮助。通过研究和实践,开发者不仅可以掌握基本的编程技巧...
实现电话拨号与短信发送功能的一个android项目
主要介绍了Android开发之电话拨号器和短信发送器实现方法,结合实例形式较为详细的分析了Android电话拨号器和短信发送器的具体原理与实现步骤,需要的朋友可以参考下
【安卓拨号器】是一款基于Android操作系统的应用,它的核心功能是为用户提供便捷的电话拨打、联系人管理和短信发送服务。这款应用的源代码对于学习和理解Android开发,特别是通讯录管理和电话功能集成的开发者来说,...
对于打电话功能,需要添加`Manifest.permission.CALL_PHONE`权限,这样应用才能调用系统的拨号器拨打电话。对于发送短信功能,需要`Manifest.permission.SEND_SMS`权限,使得应用能够创建并发送短信。在`...
对于短信服务,Android提供了SmsManager类,这是处理短信发送的核心组件。 1. **SmsManager**:这是Android SDK中的一个关键类,允许开发者发送短信。通过调用`SmsManager.getDefault()`可以获取到系统默认的...
这会启动系统的拨号器,但不会自动拨打电话。代码示例如下: ```java Intent intent = new Intent(Intent.ACTION_DIAL); intent.setData(Uri.parse("tel:1234567890")); // 替换为要拨打的电话号码 start...
在Android开发过程中,有时我们需要测试应用程序中的短信发送功能,或者模拟多设备间的通信。这篇内容将详细介绍如何在Android模拟器之间实现互相发送短信,并提供相关的代码示例。 首先,理解Android系统中的SMS...
这里创建了两个`PendingIntent`,分别用于监听短信发送成功(ACTION_SMS_SENT)和短信送达(ACTION_SMS_DELIVERED)的广播事件。发送短信可能需要`SEND_SMS`权限,否则可能会失败。 然而,从Android 6.0(API级别23...
Android电话拨号器是系统内置的应用程序,允许用户输入电话号码并发起通话。本篇文章将深入探讨Android电话拨号的相关知识点,包括其工作原理、API接口、安全性和自定义实现。 1. **工作原理** Android电话拨号器...
总结来说,"自定义短信发送demo"是一个包含发送短信和定制电话簿功能的示例项目,开发者可以通过学习这个项目来提升自己的Android应用开发技能,特别是与通信相关的部分。通过深入理解并实践这两个功能,可以为用户...
在 Android 中,ITelephony 接口和 ISms 接口是两个重要的接口,分别用于处理电话拨号和短信发送。ITelephony 接口用于处理电话拨号,ISms 接口用于处理短信发送。通过这两个接口,我们可以实现电话拨号和短信发送的...
- `sentPI`和`deliveredPI`是可选的`PendingIntent`,用于监听短信发送状态和送达状态,可以为空。 2. **拨打电话**: - 使用`Intent`对象来启动拨号器或者直接拨打号码。创建一个`Intent`,设置动作为`ACTION_...
在Android中,我们可以使用`Intent`来调用系统的拨号器应用,让用户拨打指定的电话号码。以下是核心代码: ```java // 创建拨打电话的Intent Intent callIntent = new Intent(Intent.ACTION_DIAL); callIntent....
在Android平台上,开发能够拨打电话和发送短信的应用是一项常见的任务。这个"android打电话发短信的eclipse工程"为你提供了一个现成的框架,让你能够快速地实现这些功能。以下将详细解析这个工程中的关键知识点: 1...
总的来说,这个“Android打电话和发短信的小demo”覆盖了Android开发中的多个重要知识点:运行时权限管理、Intent的使用、SmsManager的短信发送、联系人数据的读取以及UI交互。对于初学者来说,这是一个很好的实践...