一、Intent的使用完成Android拨号通讯功能
拨打电话的程序,相比之前设计的美食刊或者是小应用组件不同的地方,是涉及到了Intent完成组件的通讯。使用到了拨号的权限,调用Android本身封装的应用程序来实现该功能。大致步骤如下:
1.配置文件:activity_main.xml——主要负责页面的布局以及设置每个控件的id
2.Java类:同样的需要加载界面中的各个控件,并且对使用到的控件定义以及初始化值。由于是实现拨号功能,所以用到了EditText textResult用来展示拨号内容。而对于拨号内容是会随着用户添加而不断发生变化的,并且可能会使用到*、#等字符,所以在这里选择StringBuffer currentNum来存取用户点触的号码串。
3.事件处理:由于拨号器每个键都会触发事件,而且基本上都是相同的事件处理操作。所以在activity_main.xml中就已经对每个button进行了事件的定义。digital_click():数字按钮点击后事件调用方法;dial(View view)通话键调用的方法;delete(View view)点击删除事件调用方法。该部分内容终最关键的在于拨号时使用了Intent,将数据以uri传入调用系统库的拨号功能。
①得到EdiText,获取电话号码
②创建意图的引用:Intent intrnt = new Intent();
③设置意图对象的动作setAction()
④拨打电话号码setData()
⑤开启意图statActivity(Intent)
⑥修改安全异常:AndroidMainfest.xml中的permissions-->android.permission.CALL_PHONE
public void dial(View view){//通话键调用的方法 EditText text=(EditText)findViewById(R.id.editText1); String number=text.getText().toString(); Intent intent=new Intent();//intent方法调用系统库拨号功能 intent.setAction(intent.ACTION_CALL); intent.setData(Uri.parse("tel:"+number));//将数据以uri传入。 startActivity(intent); }
具体代码如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/LinearLayout2" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/background" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <EditText android:id="@+id/editText1" android:layout_width="match_parent" android:layout_height="85dp" android:ems="10" android:background="#ffffffff" android:textSize="40sp" android:textStyle="bold" android:textColor="#ff333333" > <requestFocus /> </EditText> <TableLayout android:layout_width="wrap_content" android:layout_height="244dp" android:layout_marginTop="12dp" > <TableRow android:id="@+id/TableRow04" android:layout_width="110dp" android:layout_height="wrap_content" > <ImageButton android:id="@+id/ImageButton01" android:layout_width="100dp" android:layout_height="60dp" android:onClick="digital_click" android:src="@drawable/b1" android:tag="1" android:textSize="30sp" android:background="@drawable/my_button_background" /> <ImageButton android:id="@+id/ImageButton02" android:layout_width="100dp" android:layout_height="60dp" android:src="@drawable/b2" android:onClick="digital_click" android:background="@drawable/my_button_background" android:tag="2"/> <ImageButton android:id="@+id/ImageButton03" android:layout_width="100dp" android:layout_height="60dp" android:src="@drawable/b3" android:onClick="digital_click" android:background="@drawable/my_button_background" android:tag="3" /> </TableRow> <TableRow android:id="@+id/TableRow03" android:layout_width="110dp" android:layout_height="wrap_content" > <ImageButton android:id="@+id/ImageButton4" android:layout_width="100dp" android:layout_height="60dp" android:onClick="digital_click" android:src="@drawable/b4" android:background="@drawable/my_button_background" android:tag="4" /> <ImageButton android:id="@+id/ImageButton5" android:layout_width="100dp" android:layout_height="60dp" android:onClick="digital_click" android:src="@drawable/b5" android:background="@drawable/my_button_background" android:tag="5" /> <ImageButton android:id="@+id/ImageButton06" android:layout_width="100dp" android:layout_height="60dp" android:onClick="digital_click" android:src="@drawable/b6" android:background="@drawable/my_button_background" android:tag="6"/> </TableRow> <TableRow android:id="@+id/TableRow02" android:layout_width="110dp" android:layout_height="wrap_content" > <ImageButton android:id="@+id/ImageButton7" android:layout_width="100dp" android:layout_height="60dp" android:background="@drawable/my_button_background" android:onClick="digital_click" android:src="@drawable/b7" android:tag="7"/> <ImageButton android:id="@+id/ImageButton8" android:layout_width="100dp" android:layout_height="60dp" android:background="@drawable/my_button_background" android:onClick="digital_click" android:src="@drawable/b8" android:tag="8" /> <ImageButton android:id="@+id/ImageButton9" android:layout_width="100dp" android:layout_height="60dp" android:background="@drawable/my_button_background" android:onClick="digital_click" android:src="@drawable/b9" android:tag="9" /> </TableRow> <TableRow android:id="@+id/TableRow01" android:layout_width="110dp" android:layout_height="wrap_content" > <ImageButton android:id="@+id/ImageButton10" android:layout_width="100dp" android:layout_height="60dp" android:background="@drawable/my_button_background" android:onClick="digital_click" android:src="@drawable/b10" android:tag="*"/> <ImageButton android:id="@+id/ImageButton11" android:layout_width="100dp" android:layout_height="60dp" android:background="@drawable/my_button_background" android:onClick="digital_click" android:src="@drawable/b11" android:tag="0"/> <ImageButton android:id="@+id/ImageButton12" android:layout_width="100dp" android:layout_height="60dp" android:background="@drawable/my_button_background" android:onClick="digital_click" android:src="@drawable/b12" android:tag="#" /> </TableRow> </TableLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" > <ImageButton android:id="@+id/message" android:layout_width="100dp" android:layout_height="wrap_content" android:background="@drawable/messa" /> <ImageButton android:id="@+id/dialer" android:layout_width="100dp" android:layout_height="wrap_content" android:onClick="dial" android:background="@drawable/call" /> <ImageButton android:id="@+id/delete" android:layout_width="100dp" android:layout_height="wrap_content" android:onClick="delete" android:background="@drawable/dele" /> </LinearLayout> </LinearLayout>
MainActivity.java
package com.example.call; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.ImageButton; import android.widget.Toast; public class MainActivity extends Activity { private EditText textResult; private StringBuffer currentNum = new StringBuffer(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textResult=(EditText)findViewById(R.id.editText1); } public void digital_click(View view){//数字按钮点击后事件调用的方法 ImageButton btn=(ImageButton)view; String text=btn.getTag().toString(); currentNum.append(text); display(); } public void dial(View view){//通话键调用的方法 EditText text=(EditText)findViewById(R.id.editText1); String number=text.getText().toString(); Intent intent=new Intent();//intent方法调用系统库拨号功能 intent.setAction(intent.ACTION_CALL); intent.setData(Uri.parse("tel:"+number));//将数据以uri传入。 startActivity(intent); } public void delete(View view){ if(currentNum.length()>=1){ currentNum.delete(currentNum.length()-1,currentNum.length()); } if(currentNum.length()==0){ Toast.makeText(MainActivity.this,"请输入号码", 100).show(); display(); } textResult.setText(currentNum); } public double stringToDouble(){ if(currentNum.length()==0){ return 0; } double result=Double.parseDouble(currentNum.toString()); return result; } private void display() { // TODO Auto-generated method stub textResult.setText(currentNum.toString()); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }