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"/>