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文件的压缩包,欢迎大家下载使用