android拨号器&短信发送

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

猜你喜欢

转载自529328914.iteye.com/blog/2382391