我的第一个app:电信宽带密码一键获取客户端

由于学校的电信宽带需要每天使用短信获取一次登录密码,每次手动输入一个字符串"xykdmm"到"10000"显然是很麻烦的,就想自己写一个软件来一键获取密码,第一版软件实现了一个功能,点击自动获取按钮就可以自动在后台发送一条获取密码的短信,但是查看还是需要手动到短信列表中查看,然后又想加一个功能在收到密码后自动将验证码显示到一个textView。一个安卓新手两个下午完成了这个软件,现在还是有点小遗憾,没有完成定时发送的功能,本来是想每天早上7点自动发送短信的,下个周末再将这个功能完善吧。

通过完成这个软件了解了很多知识。

下面是代码。

package com.nimatech.caopeng.sendsms;

import android.Manifest;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.telephony.SmsManager;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MainActivity extends AppCompatActivity {
    SmsManager smsManager = SmsManager.getDefault();
    private Button button;
    private Button settimebutton;
    final private int REQUEST_CODE_ASK_PERMISSIONS = 123;
    private SmsObserver smsObserver;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        Button button = (Button) findViewById(R.id.send0);
        Button settimebutton = (Button) findViewById(R.id.settimesend);
        smsObserver = new SmsObserver(this, smsHandler);
        TextView textView1 = (TextView) findViewById(R.id.textView1);
        getContentResolver().registerContentObserver(SMS_INBOX, true, smsObserver);

        setSupportActionBar(toolbar);
//        requestPermissions(new String[]{Manifest.permission.SEND_SMS},
//                REQUEST_CODE_ASK_PERMISSIONS);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                smsManager.sendTextMessage("10000", null, "xykdmm", null, null);
                Toast.makeText(MainActivity.this, "只需要点一下就好了!", Toast.LENGTH_LONG).show();
            }
        });
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                smsManager.sendTextMessage("10000", null, "xykdmm", null, null);
                Toast.makeText(MainActivity.this, "只需要点一下就好了!", Toast.LENGTH_LONG).show();
            }
        });
        settimebutton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //操作:发送一个广播,广播接收后Toast提示定时操作完成
                Intent intent = new Intent(MainActivity.this, AlermReceiver.class);
                intent.setAction("short");
                PendingIntent sender =
                        PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);

//设定一个五秒后的时间
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.SECOND, 20);

                AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
                alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);
//或者以下面方式简化
//alarm.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()+5*1000, sender);

            }
        });


    }

    public Handler smsHandler = new Handler() {
        // 这里可以进行回调的操作
        // TODO
        public void handleMessage(android.os.Message msg) {
            System.out.println("smsHandler 执行了.....");
        }

        ;
    };

    private Uri SMS_INBOX = Uri.parse("content://sms/");

    public void getSmsFromPhone() {
        ContentResolver cr = getContentResolver();
        String[] projection = new String[]{"body", "address", "person"};// "_id", "address",
        // "person",, "date",
        // "type
        String where = " date >  "
                + (System.currentTimeMillis() - 10 * 60 * 1000);
        Cursor cur = cr.query(SMS_INBOX, projection, where, null, "date desc");
        if (null == cur)
            return;
        if (cur.moveToNext()) {
            String number = cur.getString(cur.getColumnIndex("address"));// 手机号
            String name = cur.getString(cur.getColumnIndex("person"));// 联系人姓名列表
            String body = cur.getString(cur.getColumnIndex("body"));

            System.out.println(">>>>>>>>>>>>>>>>手机号:" + number);
            System.out.println(">>>>>>>>>>>>>>>>联系人姓名列表:" + name);
            System.out.println(">>>>>>>>>>>>>>>>短信的内容:" + body);

            // 这里我是要获取自己短信服务号码中的验证码~~
            // body="测试验证码2346ds";
            Pattern pattern = Pattern.compile("[a-zA-Z0-9]{6}");
            Matcher matcher = pattern.matcher(body);//

            if (matcher.find()) {
                String res = matcher.group().substring(0, 6);// 获取短信的内容

                setTextView(res);
                System.out.println(res);

            }
        }
    }

    protected void setTextView(String text) {
        TextView textView = (TextView) findViewById(R.id.textView1);
        textView.setText(text);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.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();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    class SmsObserver extends ContentObserver {

        public SmsObserver(Context context, Handler handler) {
            super(handler);
        }

        @Override
        public void onChange(boolean selfChange) {
            super.onChange(selfChange);
            // 每当有新短信到来时,使用我们获取短消息的方法
            getSmsFromPhone();

        }
    }
}
package com.nimatech.caopeng.sendsms;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsManager;
import android.widget.Toast;

/**
 * Created by caopeng on 15/10/31.
 */
public class AlermReceiver extends BroadcastReceiver {
    SmsManager smsManager = SmsManager.getDefault();
    public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
        if(intent.getAction().equals("short")){
            smsManager.sendTextMessage("10000", null, "xykdmm", null, null);
            Toast.makeText(context, "短信已发送", Toast.LENGTH_LONG).show();
        }else{
            Toast.makeText(context, "repeating alarm",Toast.LENGTH_LONG).show();
        }
    }
}
<TextView android:text=" " android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/textView1"
        android:textColor="#000000"
        android:textSize="50dp"
        android:layout_marginTop="52dp"
        android:layout_below="@+id/textView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="只需要点一下就好了"
        android:id="@+id/send0"
        android:layout_marginBottom="91dp"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="定时发送"
        android:id="@+id/settimesend"
        android:layout_alignTop="@+id/send0"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="验证码是:"
        android:id="@+id/textView"
        android:textColor="#000000"
        android:textSize="30dp"
        android:layout_alignParentTop="true"
        android:layout_alignLeft="@+id/textView1"
        android:layout_alignStart="@+id/textView1"
        android:layout_marginTop="43dp" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
// 取得读取与发送短信的权限
<receiver android:name="com.nimatech.caopeng.alerm.AlermReceiver"/>
// 注册接收器

 

posted @ 2015-11-01 20:53  airpeng  阅读(926)  评论(0编辑  收藏  举报