= 电话拨号器/点击事件写法 =
开发安卓应用步骤:
- 1. 写UI, 即布局文件.
- 2. 写代码, Activity,
ContentProvider, Service, 等等.
- 3. 在清单文件中配置 Activity
等四大组件.
- 4. 在清单文件中添加权限.
下面开发一个电话拨号器应用.
首先是写布局文件:
{{{class="brush:xml"
<?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:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textAppearance="?android:attr/textAppearanceLarge" />
<EditText
android:id="@+id/et_phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ems="10"
android:inputType="phone"
>
<requestFocus
/>
</EditText>
<Button
android:id="@+id/bt_call"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/call"
/>
</LinearLayout>
}}}
怎样给控件起名字? 在布局文件中 "@" 表示 R 文件, "@+id"
就表示在R文件中加一个id,
控件的名字一般是 "缩写_描述" .
Activity中的代码如下:
{{{class="brush:java"
public class MainActivity extends
Activity implements OnClickListener{
// 将 控件作为字段是为了方便内部类访问, 而避免了多次的查询,
且节省内存.
private EditText
et_phone;
/**
* activity创建的时候 调用 onCreate 方法,
且只调用一次.
*/
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
// 根据布局,显示activity的界面,
在res目录下layout目录下有一个xml定义的布局文件
setContentView(R.layout.activity_main);
// 查找到需要使用的控件
Button button = (Button)
findViewById(R.id.bt_call);
et_phone = (EditText)
findViewById(R.id.et_phone);
// 为按钮设置点击事件.
需要一个事件监听器
//button.setOnClickListener(new
MyOnClickListener());
// 点击事件写法 2:
使用匿名内部类.
/*button.setOnClickListener(new
OnClickListener() {
@Override
public void onClick(View v)
{
callPhone();
}
});*/
// 点击事件写法 3: 让这个Activity本身实现
OnClickListener 接口
//button.setOnClickListener(this);
}
// 点击事件写法 1: 使用内部类.
private class MyOnClickListener
implements OnClickListener {
@Override
public void onClick(View v)
{
callPhone();
}
}
// 点击事件写法 3: 让这个Activity本身实现
OnClickListener 接口, 这个最常用
@Override
public void onClick(View v)
{
callPhone();
}
// 点击事件写法 4: 在布局文件中的控件上添加属性
android:onClick=xxx,
// 然后在activity中写对应的方法. 注意必须是 public
的方法, 而且参数一定要为 View v !!!
// 这个View代表的是发生点击事件的控件
public void dialPhone(View view)
{
callPhone();
}
private void callPhone()
{
String phone =
et_phone.getText().toString().trim();
if ("".equals(phone))
{
// 注意吐司一定不要忘了 show
!!
Toast.makeText(MainActivity.this, "电话号码不能为空",
Toast.LENGTH_SHORT).show();
} else {
// 拨打电话 激活系统的拨号应用
把电话号码传给系统的应用.
// 打人 打酱油 动作+数据
就是一个完整的行为.
Intent intent = new
Intent(); // 创建一个意图
intent.setAction(Intent.ACTION_CALL); // 为意图设置动作
intent.setData(Uri.parse("tel://" + phone)); // 为意图设置数据.
startActivity(intent); //
将此意图以一个 Activity 的形式启动起来..
}
}
}
}}}
在清单文件中配置 Activity,
这一步在创建工程时eclipse自动做了.
另外就是要加入权限.
{{{class="brush:xml"
<uses-permission
android:name="android.permission.CALL_PHONE"/>
}}}
至此, 电话拨号器完成.
--------------
打电话, 基带? Socket? ip + 端口号?
--------------
== 关于上下文 ==
this 和
getApplicationContext()
对话框是activity的一部分,
它一定要被挂载在activity上
== 给应用改图标??? ==
在res目录下的drawable目录中放一张png格式图片xxx,然后把manifest文件中application标签下的
activity标签的android:icon属性改为android:icon="@drawable/xxx"即可.
intent-filter:activity的子标签,是activity的一个配置信息,作用是在luncher程序里面生成一个应用程序的图标
{{{class="brush:java"
<intent-filter >
<action
android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
}}}
如果没有这个配置,应用安装后不会显示在launcher中,无法启动。
= 短信发送器 =
很简单, 直接贴核心代码:
{{{class="brush:java"
String number =
et_number.getText().toString().trim();
String content =
et_content.getText().toString().trim();
if(TextUtils.isEmpty(number) ||
TextUtils.isEmpty(content)) {
Toast.makeText(this,
"号码或短信内容不能为空", Toast.LENGTH_SHORT).show();
} else {
// 发短信需要使用 SmsManager,
注意要使用 android.telephony.SmsManager
SmsManager smsManager =
SmsManager.getDefault();
// 将长文本切割成多条短信.
ArrayList<String>
messages = smsManager.divideMessage(content);
for(String msg : messages)
{
smsManager.sendTextMessage(number, null, msg, null, null);
}
Toast.makeText(this, "短信发送成功",
Toast.LENGTH_SHORT).show();
}
}}}
别忘了加权限:
{{{class="brush:java"
<uses-permission
android:name="android.permission.SEND_SMS"/>
}}}