安卓短信助手功能代码实现

关于如何实现Android的短信发送功能呢?下面就具体为大家介绍一下

(1)首先给大家看一下系统界面:

短信助手主界面
这里主要有两个EditText和三个Button,当点击第一个按钮时,跳转到系统联系人界面,可以选择相应的联系人号码,点击后返回到这个界面,第一个EditText填充上号码。点击第二个按钮后,跳转到短信的列表界面,选择短信内容,回到本页面,填充第二个EditText,然后点击第三个Button可以进行发送短信的操作。

(2)系统的具体实现

对于XML文件布局,由于 比较简单,这里就不在论述,下面是具体的代码实现:

主页面的代码实现

package com.example.lvjianwen150504;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.telephony.gsm.SmsManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
 * 第二题主页面
 * 
 * @author Lvjianwen
 * 
 */
public class Exercise1_view7_ex4_activity extends Activity implements
        OnClickListener {
    //注册控件
    private EditText et_num, et_text;
    private Button btn_num, btn_text, btn_send;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //加载布局
        setContentView(R.layout.activity_view7_ex4);
        init();
    }
/**
 * 初始化方法
 */
    private void init() {
        et_num = (EditText) findViewById(R.id.et_view7_ex4_num);
        et_text = (EditText) findViewById(R.id.et_view7_ex4_text);
        btn_num = (Button) findViewById(R.id.btn_view7_ex4_num);
        btn_text = (Button) findViewById(R.id.btn_view7_ex4_text);
        btn_send = (Button) findViewById(R.id.btn_view7_ex4_send);
        //注册事件监听
        btn_num.setOnClickListener(this);
        btn_text.setOnClickListener(this);
        btn_send.setOnClickListener(this);
    }
/**
 * 实现按钮事件监听
 */
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.btn_view7_ex4_num://页面跳转,获取联系人
            Intent num = new Intent(Intent.ACTION_PICK);
            num.setType("vnd.android.cursor.dir/contact");
            startActivityForResult(num, 0);
            break;
        case R.id.btn_view7_ex4_text://页面跳转,获取短信内容
            Intent text = new Intent();
            text.setClass(Exercise1_view7_ex4_activity.this, Exercise1_view7_ex4_msg_activity.class);
            startActivityForResult(text, 1);
            break;
        case R.id.btn_view7_ex4_send://发送短信
            if(et_num.getText().toString().trim().length()==0){
                Toast.makeText(Exercise1_view7_ex4_activity.this, "电话号码不能为空", Toast.LENGTH_SHORT).show();
                return;
            }else if(et_text.getText().toString().trim().length()==0){
                Log.i("test1", et_text.getText().toString().trim().length()+"");
                //当短信内容为空时,弹出确认对话框
                new AlertDialog.Builder(Exercise1_view7_ex4_activity.this)
                .setTitle("确认对话框")
                .setMessage("是否要发送空短信?")
                .setPositiveButton("确认", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        SmsManager sm=SmsManager.getDefault();
                        sm.sendTextMessage(et_num.getText().toString().trim(), null, " ", null, null);
                        insertMsgData(et_num.getText().toString().trim(), " ");
                        Toast.makeText(Exercise1_view7_ex4_activity.this, "短信发送中...请稍后到信箱查看", Toast.LENGTH_LONG).show();
                    }
                })
                .setNegativeButton("取消", new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        return;
                    }
                })
                .show();
            }else{
                SmsManager sm=SmsManager.getDefault();
                sm.sendTextMessage(et_num.getText().toString().trim(), null, et_text.getText().toString()+"", null, null);
                insertMsgData(et_num.getText().toString().trim(), et_text.getText().toString());
                Toast.makeText(Exercise1_view7_ex4_activity.this, "短信发送中...请稍后到信箱查看", Toast.LENGTH_LONG).show();
            }
            break;
        default:
            break;
        }
    }

    /**
     * 将短信插入到数据库中的方法
     * 所需权限
     * <uses-permission android:name="android.permission.WRITE_SMS" />
     * <uses-permission android:name="android.permission.READ_SMS" />
     */

    private void insertMsgData(String tel,String msg) {
        ContentValues values = new ContentValues();
        // 发送时间
        values.put("date", System.currentTimeMillis());
        // 阅读状态
        values.put("read", 0);
        // 1为收 2为发
        values.put("type", 2);
        // 送达号码
        values.put("address", tel);
        // 送达内容
        values.put("body", msg);
        // 插入短信库
        getContentResolver().insert(Uri.parse("content://sms/sent"), values);
    }

    /**
     * intent跳转后接受到activity的数据
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case 0://操作联系人
            if (resultCode == Activity.RESULT_OK) {
                Uri contactData = data.getData();
                Cursor c = managedQuery(contactData, null, null, null, null);
                if (c.moveToFirst()) {
                    String contactId = c.getString(c
                            .getColumnIndex(ContactsContract.Contacts._ID));
                    // String name = c
                    // .getString(c
                    // .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    String hasPhone = c
                            .getString(c
                                    .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                    String phoneNumber = null;
                    if (hasPhone.equalsIgnoreCase("1"))
                        hasPhone = "true";
                    else
                        hasPhone = "false";

                    if (Boolean.parseBoolean(hasPhone)) {
                        Cursor phones = getContentResolver()
                                .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                                        null,
                                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                                + " = " + contactId, null, null);
                        while (phones.moveToNext()) {
                            phoneNumber = phones
                                    .getString(phones
                                            .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            et_num.setText(phoneNumber);
                        }
                        phones.close();
                    }
                }
            }
            break;
        case 1://操作短信
            if(resultCode==11){
                String sms_body=data.getStringExtra("msg_body");
                et_text.setText(sms_body);
            }
            break;
        default:
            break;
        }
    }
}

以上就是主要功能的代码,有相应的注释,大家应该可以明白。这里注意由于联系人是调用的系统主页面,而短信内容是调用自定义的Listview中的内容,因此还有ListView的具体设计。

短信封装实体类

package com.iotek.entity;

/**
 * 短信封装实体类
 * 
 * @author Lvjianwen
 * 
 */
public class SmsInfo {
    /**
     * 短信内容
     */
    private String smsbody;
    /**
     * 发送短信的电话号码
     */
    private String phoneNumber;
    /**
     * 发送短信的日期和时间
     */
    private String date;
    /**
     * 发送短信人的姓名
     */
    private String name;
    /**
     * 短信类型1是接收到的,2是已发出
     */
    private String type;

    public String getSmsbody() {
        return smsbody;
    }

    public void setSmsbody(String smsbody) {
        this.smsbody = smsbody;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }

    public void setPhoneNumber(String phoneNumber) {
        this.phoneNumber = phoneNumber;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

上面是对于短信的内容的封装。

获取短信方法类的封装

package com.iotek.entity;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.database.Cursor;
import android.net.Uri;

/**
 * class description:获取手机中的各种短信信息<BR>
 * PS: 需要权限 <uses-permission android:name="android.permission.READ_SMS" /><BR>
 * Date:2012-3-19<BR>
 * 
 * @version 1.00
 */
public class SmsContent {

    private Activity activity;
    private Uri uri;
    List<SmsInfo> infos;

    public SmsContent(Activity activity, Uri uri) {
        infos = new ArrayList<SmsInfo>();
        this.activity = activity;
        this.uri = uri;
    }

    /**
     * Role:获取短信的各种信息 <BR>
     * Date:2012-3-19 <BR>
     * 
     */
    public List<SmsInfo> getSmsInfo() {
        String[] projection = new String[] { "_id", "address", "person",
                "body", "date", "type" };
        Cursor cusor = activity.managedQuery(uri, projection, null, null,
                "date desc");
        int nameColumn = cusor.getColumnIndex("person");
        int phoneNumberColumn = cusor.getColumnIndex("address");
        int smsbodyColumn = cusor.getColumnIndex("body");
        int dateColumn = cusor.getColumnIndex("date");
        int typeColumn = cusor.getColumnIndex("type");
        if (cusor != null) {
            while (cusor.moveToNext()) {
                SmsInfo smsinfo = new SmsInfo();
                smsinfo.setName(cusor.getString(nameColumn));
                smsinfo.setDate(cusor.getString(dateColumn));
                smsinfo.setPhoneNumber(cusor.getString(phoneNumberColumn));
                smsinfo.setSmsbody(cusor.getString(smsbodyColumn));
                smsinfo.setType(cusor.getString(typeColumn));
                infos.add(smsinfo);
            }
            cusor.close();
        }
        return infos;
    }
}

上面主要封装了如何获取方法的封装。有关于短信这块的内容参考了网上其他的博客,这里向这些博主们提出感谢。

其他功能的实现

这里除了发送短信的功能,还包括了一个人品测试的小程序,其界面如下:
人品测试主界面
人品测试二级界面
这里主要应用了Intent传递数据的功能,在二级界面中,还应用了一个按两次返回键退出界面的功能。

主界面代码

package com.example.lvjianwen150504;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
/**
 * 第一题主界面
 * @author Lvjianwen
 *
 */
public class Exercise1_view7_ex3_activity extends Activity {
    private EditText et;
    private Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view7_ex3);
        init();
    }

    private void init(){
        et=(EditText)findViewById(R.id.et_view7_ex3);
        btn=(Button)findViewById(R.id.btn_view7_ex3);

        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if(et.getText().toString().trim().length()==0){
                    Toast.makeText(Exercise1_view7_ex3_activity.this, "输入的名字不能为空!", Toast.LENGTH_SHORT).show();
                }else{
                    String data=et.getText()+"";
                    Intent intent=new Intent();
                    intent.setClass(Exercise1_view7_ex3_activity.this, Exercise1_view7_ex3_item_activity.class);
                    intent.putExtra("name", data);
                    startActivity(intent);
                }
            }
        });
    }
}

二级页面代码

package com.example.lvjianwen150504;

import java.util.Random;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
/**
 * 第一题二级页面
 * @author Lvjianwen
 *
 */
public class Exercise1_view7_ex3_item_activity extends Activity {
    private TextView tv;
    private ProgressBar pbar;
    private Random random;
    private long mExitTime=0;
//  private Boolean flag=true;
    private Intent data;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_view7_ex3_item);
        init();
//      flag=data.getBooleanExtra("data_flag", true);
    }

    private void init(){
        random=new Random();
        tv=(TextView)findViewById(R.id.tv_view7_ex3);
        pbar=(ProgressBar)findViewById(R.id.pbar_view7_ex3);

        data=getIntent();
        String name=data.getStringExtra("name");
        int temp=random.nextInt(101);
        tv.setText(name+":您的RP值为:"+temp);
        pbar.setProgress(temp);
    }
    /**
     * 捕获按键的方法
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_BACK){
            if(System.currentTimeMillis()-mExitTime>2000){
                Toast.makeText(Exercise1_view7_ex3_item_activity.this, "再按一次退出程序", Toast.LENGTH_LONG).show();
                mExitTime=System.currentTimeMillis();
            }else{
                System.exit(0);
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
//      Intent temp=new Intent();
//      temp.setClass(Exercise1_view7_ex3_item_activity.this, Exercise1_view7_ex3_item_activity.class);
//      if(flag){
//          flag=false;
//          temp.putExtra("data_flag", flag);
//          Toast.makeText(Exercise1_view7_ex3_item_activity.this, "再按一次退出程序", Toast.LENGTH_LONG).show();
//          startActivity(temp);
//      }else{
//          finish();
//          System.exit(0);
//      }
    }
}

这里的功能比较简单,就不在具体论述,以上就是本功能代码的主要实现。
这是本人第一次写博客,在安卓软件领域目前输入菜鸟级别,有什么不足的地方请大家多多指教
想要源代码的可以到下面的链接自行下载
短信助手源代码下载链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值