= 电话拨号器/点击事件写法 =发短信

= 电话拨号器/点击事件写法 =
开发安卓应用步骤:
    - 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"/>
}}}




posted @ 2016-10-01 16:29  杨伟乔  阅读(277)  评论(0编辑  收藏  举报