Android基础(一) 电话、短信
一.打电话
1.界面
TextView, EditText, Button
EditText可以配置inputType属性指定输入类型
EditText可以配置hint指定提示信息
Button可以配置onClick指定点击时执行的方法
2.Java代码
findViewById()
创建Intent, setAction(), setData(), startActivity()
3.注意事项*
打电话属于需要收费的功能, 必须配置权限, 否则使用时会出现异常
<uses-permission android:name="android.permission.CALL_PHONE"/>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/insert_num" /> <EditText android:inputType="phone" android:id="@+id/numET" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <!-- 在此处使用onClick属性,值为要调用的方法名,则在点击时调用该方法 --> <Button android:onClick="onClick" android:id="@+id/callBT" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/call" /> </LinearLayout>
//第一种
public class MainActivity1 extends Activity {
private EditText numET;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // 解析XML, 创建了4个对象
// 获取到按钮对象
Button callBT = (Button) findViewById(R.id.callBT);
// 给按钮对象添加监听器
callBT.setOnClickListener(new MyOnClickListener());
// 当点击按钮的时候获取文本框
numET = (EditText) findViewById(R.id.numET);
}
private class MyOnClickListener implements OnClickListener {
public void onClick(View v) {
// 获取文本框中的文本
String num = numET.getText().toString();
// 把文本作为电话号码, 拨打电话
Intent intent = new Intent(); // 创建一个意图对象
intent.setAction(Intent.ACTION_CALL); // 设置意图的动作
intent.setData(Uri.parse("tel:" + num)); // 设置意图的数据
startActivity(intent); // 通过意图打开一个新的界面
}
}
}//第二种:让Activity继承OnClickListener接口,则该Activity本身也是监听器
public class MainActivity2 extends Activity implements OnClickListener {
private EditText numET;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // 解析XML, 创建了4个对象
// 获取到按钮对象
Button callBT = (Button) findViewById(R.id.callBT);
// 给按钮对象添加监听器
callBT.setOnClickListener(this);//传入该Activity(该Activity本身也是监听器)
// 当点击按钮的时候获取文本框
numET = (EditText) findViewById(R.id.numET);
}
//由于该Activity本身也是监听器,则覆写onClick方法
public void onClick(View v) {
// 获取文本框中的文本
String num = numET.getText().toString();
// 把文本作为电话号码, 拨打电话
Intent intent = new Intent(); // 创建一个意图对象
intent.setAction(Intent.ACTION_CALL); // 设置意图的动作
intent.setData(Uri.parse("tel:" + num)); // 设置意图的数据
startActivity(intent);
}
}
//第三种:让Activity继承OnClickListener接口,则该Activity本身也是监听器
public class MainActivity3 extends Activity {
private EditText numET;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // 解析XML, 创建了4个对象
// 当点击按钮的时候获取文本框
numET = (EditText) findViewById(R.id.numET);
}
//在main.xml的 <Button/> 中使用android:onClick="onClick"属性,则不需要获得按钮对象和定义监听器
public void onClick(View v) {
// 获取文本框中的文本
String num = numET.getText().toString();
// 把文本作为电话号码, 拨打电话
Intent intent = new Intent(); // 创建一个意图对象
intent.setAction(Intent.ACTION_CALL); // 设置意图的动作
intent.setData(Uri.parse("tel:" + num)); // 设置意图的数据
startActivity(intent); // 通过意图打开一个新的界面
}
}
二.发短信
1.界面
类似打电话, EditText配置了inputType为textMultiLine, maxLines和minLines
2.Java代码
获取SmsManager.getDefault()
分割短信divideMessage()
发送短信sendTextMessage()
弹出通知Toast.makeText().show()
3.注意事项
发短信也需要收费, 需要权限
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/insert_num" /> <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+id/numET" android:inputType="phone" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/insert_content" /> <EditText android:id="@+id/contentET" android:inputType="textMultiLine" android:minLines="3" android:maxLines="5" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Button android:onClick="onClick" android:text="@string/send_sms" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
public class MainActivity extends Activity {
private EditText numET;
private EditText contentET;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
numET = (EditText) findViewById(R.id.numET);
contentET = (EditText) findViewById(R.id.contentET);
}
//此处不能为private,否则外部无法调用
public void onClick(View view) {
try {
// 获取两个文本框中的内容
String num = numET.getText().toString();
String content = contentET.getText().toString();
//当号码为空时,弹出提示
if(num.length()==0)
Toast.makeText(getApplicationContext(), R.string.num_err, Toast.LENGTH_SHORT).show();
//当信息内容为空时,弹出提示
if(content.length()==0)
Toast.makeText(getApplicationContext(), R.string.content_err, Toast.LENGTH_SHORT).show();
// 发送信息
SmsManager manager = SmsManager.getDefault();//获取短信管理器
ArrayList<String> list = manager.divideMessage(content);//把短信分段
for (String sms : list) { //遍历list
manager.sendTextMessage(num, null, sms, null, null);//分段发送短信
}
// 发送后,清除已发送文本
contentET.setText("");
// 弹出成功通知
Toast.makeText(this, R.string.send_success, 0).show();
} catch (Exception e) {
// 如果发送失败,则弹出失败通知
e.printStackTrace();
Toast.makeText(this, R.string.send_failed, 0).show();
}
}
}
权限设置:
<uses-permission android:name="android.permission.SEND_SMS"/>
浙公网安备 33010602011771号