---------------------- 路漫漫其修远兮,吾将上下而求索。学无止境!----------------------
Android电话拨号器
按钮的使用,一定会用到点击事件,然而点击事件的有一下几种写法:
1.内部类
2.匿名内部类
3.Activity类实现onClickListener接口
4.在xml定义Button是,添加android:onClick="myClick";,并实现myClick方法。
以下程序模拟了一个电话拨号器。(电话涉及安全操作,一定要在AndroidManifest.xml设置电话权限)
AndroidManifest.xml
activity_main.xml
MainActivity.java
package com.lee.phone;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;
public class MainActivity extends Activity {
private EditText editText;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) this.findViewById(R.id.button);
editText = (EditText) this.findViewById(R.id.tel);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
makeCall(v);
}
});
}
// 实现打电话功能的函数
public void makeCall(View v) {
// 获取EditText的值,并且去除前后的空格
String tel = editText.getText().toString().trim();
if (TextUtils.isEmpty(tel)) {
Toast.makeText(v.getContext(), "请输入电话号码", Toast.LENGTH_LONG).show();
return;
}
// 创建Intent实例
Intent intent = new Intent();
// 设置Intent
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + tel));
// 开启Activity
startActivity(intent);
}
}
界面如下:
上述Demo点击事件采用的是匿名内部类的形式实现的,当然也可以使用内部类的形式去实现。但是考虑到以后的开发中会
遇到很多按钮,每一个按钮都要去实现OnClickListener接口,变得十分麻烦。我们可以使用新的方式去解决这个问题!
这种方式在开发中极为常见...
1.使该Activity类实现OnClickListener接口;
2.重写实现接口的onClick方法
3.每个按钮的点击事件可以统一为**.setOnClickListener(this);
4.在onClick方法体中,使用switch语句体根据按钮的id进行分别实现功能。
修改后的MainActivity.java代码
package com.lee.phone;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;
//继承Activity,还要实现OnClickListener接口
public class MainActivity extends Activity implements OnClickListener {
private EditText editText;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) this.findViewById(R.id.button);
editText = (EditText) this.findViewById(R.id.tel);
// setOnClickListener方法的参数为this,因为该类实现了OnClickListener接口
button.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
// id为button的Button的点击事件
case R.id.button:
makeCall(v);
break;
default:
break;
}
}
// 实现打电话功能的函数
public void makeCall(View v) {
// 获取EditText的值,并且去除前后的空格
String tel = editText.getText().toString().trim();
if (TextUtils.isEmpty(tel)) {
Toast.makeText(v.getContext(), "请输入电话号码", Toast.LENGTH_LONG).show();
return;
}
// 创建Intent实例
Intent intent = new Intent();
// 设置Intent
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + tel));
// 开启Activity
startActivity(intent);
}
}
另外还有一种方式,就是在activity_main.xml等布局xml文件中的中,定义一下android:onClick="myClick";
然后在对应的Activity类中定义并实现myClick方法
package com.lee.phone;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import android.app.Activity;
import android.content.Intent;
public class MainActivity extends Activity {
private EditText editText;
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button) this.findViewById(R.id.button);
editText = (EditText) this.findViewById(R.id.tel);
// setOnClickListener方法的参数为this,因为该类实现了OnClickListener接口
}
// 实现对应的方法
public void myClick(View view) {
makeCall(view);
}
// 实现打电话功能的函数
public void makeCall(View v) {
// 获取EditText的值,并且去除前后的空格
String tel = editText.getText().toString().trim();
if (TextUtils.isEmpty(tel)) {
Toast.makeText(v.getContext(), "请输入电话号码", Toast.LENGTH_LONG).show();
return;
}
// 创建Intent实例
Intent intent = new Intent();
// 设置Intent
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + tel));
// 开启Activity
startActivity(intent);
}
}
Android短信发送器
package com.lee.msg;
import java.util.ArrayList;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.app.Activity;
public class MainActivity extends Activity implements OnClickListener {
private EditText editTextTel;
private EditText editTextMsg;
private Button buttonSend;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editTextTel = (EditText) this.findViewById(R.id.et_tel);
editTextMsg = (EditText) this.findViewById(R.id.et_con);
buttonSend = (Button) this.findViewById(R.id.btn_send);
buttonSend.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_send:
//调用短信发送方法
sendMsg();
break;
}
}
//短信发送功能
public void sendMsg() {
//SmsManager的获取
SmsManager smsManager = SmsManager.getDefault();
//得到文本文件
String text = editTextMsg.getText().toString().trim();
//得到电话号码
String tel = editTextTel.getText().toString().trim();
//将短信系分解成多条符合规定长度的短信
ArrayList texts = smsManager.divideMessage(text);
//一次遍历发送
for (String content : texts)
smsManager.sendTextMessage(tel, null, content, null, null);
}
}
发送短信也涉及到了安全问题,要在AndroidManifest.xml中加入
---------------------- 路漫漫其修远兮,吾将上下而求索。学无止境!----------------------
我的博客:http://blog.csdn.net/helloxiaobi