关闭

Android发送短信项目代码

标签: android短信
281人阅读 评论(0) 收藏 举报
分类:

这个小项目的功能就是单纯的发送一条短信到你指定的号码上,调用系统短信接口直接发送短信。另一种方法是跳转到短信发送界面发送短信,这里不介绍。

首先上效果图:
界面很简单。这里的按钮使用了自定义的图片。

步骤:

1、先建立一个Android工程。(略)

2、在AndroidManifest.xml文件中添加短信发送权限。

<?xml version="1.0" encoding="utf-8"?> <manifest    xmlns:android="http://schemas.android.com/apk/res/android"    package="alex.example.sms"    android:versionCode="1"    android:versionName="1.0" >

       <uses-sdk
       android:minSdkVersion="8"
       android:targetSdkVersion="18" />

       //--这里添加权限--
       <uses-permission android:name="android.permission.SEND_SMS" />    
       <uses-permission android:name="android.permission.READ_SMS" />
       <uses-permission android:name="android.permission.RECEIVE_SMS" />

       <application
       android:allowBackup="true"
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name"
       android:theme="@style/AppTheme" >
       <activity
           android:name=".MainActivity"
           android:label="@string/app_name" >
           <intent-filter>
               <action android:name="android.intent.action.MAIN" />   
               <category android:name="android.intent.category.LAUNCHER" />
           </intent-filter>
       </activity>
       </application>
       </manifest>

这里为了以后方便,不仅添加了短信发送权限,又多添加了短信接收权限、短信读取权限。

3、string.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <string name="app_name">也是短信</string>
    <string name="phone_num">联系人:</string>
    <string name="phone_num_editText_hint">请输入电话号码</string>
    <string name="sms_content">内容:</string>
    <string name="sms_content_editText_hint">请输入短信内容</string>
    <string name="remind_input_phone_number">联系人不能为空</string>
    <string name="remind_sms_send_finish">Sent</string>
    <string name="action_settings">Settings</string>

</resources>

4、activity_main.xml,编辑界面

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="alex.example.sms.MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/phone_num"
        android:textColor="#00BFFF"
        android:textSize="18sp" />

    <EditText
        android:id="@+id/phone_num_editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/phone_num_editText_hint"
        android:inputType="phone" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="@string/sms_content"
        android:textColor="#00BFFF"
        android:textSize="18sp" />

    <EditText
        android:id="@+id/sms_content_editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/sms_content_editText_hint" />

    <Button
        android:id="@+id/sms_send_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="25dp"
        android:background="@drawable/button_send_1" />

</LinearLayout>

这其中还涉及到了另一个文件,dimens.xml,它里面定义了简单的样式。

<resources>

    <!-- Default screen margins, per the Android Design guidelines. -->
    <dimen name="activity_horizontal_margin">16dp</dimen>
    <dimen name="activity_vertical_margin">16dp</dimen>

</resources>

5、最后上最重要的部分,MainActivity.java。这里图省事直接上全部代码了,各位见谅了。这里短信相关的方法就是自动生成的onCreat方法和一个自己编的sendSMS方法。

  • onCreat方法将各个控件添加到界面中。
  • sendSMS方法是读取2个EditText控件中的内容,并将其处理和发送出去,最后还能获取短信的发送状态。
package alex.example.sms;

import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.telephony.SmsManager;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {

    private EditText phone_num_editText;
    private EditText sms_content_editText;
    private Button sms_send_button;

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

        phone_num_editText = (EditText) findViewById(R.id.phone_num_editText);
        sms_content_editText = (EditText) findViewById(R.id.sms_content_editText);
        sms_send_button = (Button) findViewById(R.id.sms_send_button);

        // 设置按钮按键监听器
        sms_send_button.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO 点击按钮sms_send_button后会进入这里处理
                sendSMS(); // 调用自定义方法,发送短信
            }
        });

        // 设置按钮触摸监听器
        sms_send_button.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    // 按钮按下效果
                    v.setBackgroundResource(R.drawable.button_send_2);
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    // 按钮抬起效果
                    v.setBackgroundResource(R.drawable.button_send_1);
                }
                return false;
            }
        });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public void sendSMS() {
        // TODO 发送短信并获取短信的状态

        // **********************************************************************
        // 获取短信的状态
        String SENT = "sms_sent";
        String DELIVERED = "sms_delivered";

        Intent sentIntent = new Intent(SENT);
        Intent deliveredIntent = new Intent(DELIVERED);

        PendingIntent sentPI = PendingIntent.getBroadcast(
                getApplicationContext(), 0, sentIntent, 0);
        PendingIntent deliveredPI = PendingIntent.getBroadcast(
                getApplicationContext(), 0, deliveredIntent, 0);

        // 发送完成
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "短信发送成功",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(getBaseContext(),
                            "Send Failed because generic failure cause.",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    Toast.makeText(
                            getBaseContext(),
                            "Send Failed because service is currently unavailable.",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    Toast.makeText(getBaseContext(),
                            "Send Failed because no pdu provided.",
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    Toast.makeText(
                            getBaseContext(),
                            "Send Failed because radio was explicitly turned off.",
                            Toast.LENGTH_SHORT).show();
                    break;
                default:
                    Toast.makeText(getBaseContext(), "Send Failed.",
                            Toast.LENGTH_SHORT).show();
                    break;
                }
            }
        }, new IntentFilter(SENT));

        // 对方接收完成
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                switch (getResultCode()) {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "Delivered Success!",
                            Toast.LENGTH_SHORT).show();
                    break;
                case Activity.RESULT_CANCELED:
                    Toast.makeText(getBaseContext(), "Delivered Failed!",
                            Toast.LENGTH_SHORT).show();
                    break;
                }
            }
        }, new IntentFilter(DELIVERED));

        // **********************************************************************
        // 发送短信
        // 首先提取两个输入框中的内容并转换类型
        String phoneNum = phone_num_editText.getText().toString();
        String smsContent = sms_content_editText.getText().toString();

        // 判断是否输入电话号码,利用equals()函数比较
        if (phoneNum.equals("")) {
            // 未输入电话号码,出现Toast提示
            Toast.makeText(MainActivity.this,
                    R.string.remind_input_phone_number, Toast.LENGTH_SHORT)
                    .show();
        } else {
            // 以输入电话号码,进行后续处理
            // 获取短信管理器
            SmsManager smsManager = SmsManager.getDefault();
            // 判断短信内容长度是否过长(根据国际标准:纯中文上限70字,纯英文上限160字母,中英文混合上限70字和字母)
            if (smsContent.length() > 70) {
                // 若短信内容过长则进行分段处理并分段发送
                List<String> contents = smsManager.divideMessage(smsContent);
                for (String sms : contents) {
                    // 发送短信
                    smsManager.sendTextMessage(phoneNum, null, sms, sentPI,
                            deliveredPI);
                }
            } else {
                // 短信内容长度符合,直接发送
                smsManager.sendTextMessage(phoneNum, null, smsContent, sentPI,
                        deliveredPI);
            }
            Toast.makeText(MainActivity.this, R.string.remind_sms_send_finish,
                    Toast.LENGTH_SHORT).show();
        }
    }

}

上面代码还用到了两张图片,是用来美化按钮效果的。

// 设置按钮触摸监听器
        sms_send_button.setOnTouchListener(new OnTouchListener() {

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction() == MotionEvent.ACTION_DOWN) {
                    // 按钮按下效果
                    v.setBackgroundResource(R.drawable.button_send_2);
                } else if (event.getAction() == MotionEvent.ACTION_UP) {
                    // 按钮抬起效果
                    v.setBackgroundResource(R.drawable.button_send_1);
                }
                return false;
            }
        });

两张图片分别是(可以图片另存为下来使用)

1、 button_send_1,未点击状态

未点击状态

2、 button_send_2,被点击状态
被点击状态

以上就是这个项目的全部代码。
谢谢参考

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:28974次
    • 积分:694
    • 等级:
    • 排名:千里之外
    • 原创:32篇
    • 转载:14篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论
  • 启动活动的最佳写法

    balalay: 小白想问一下,看了《第一行代码》,实在搞不懂这个哪里佳了,不还是需要问别人需要传递哪些数据吗?