标签:
由于学校的电信宽带需要每天使用短信获取一次登录密码,每次手动输入一个字符串"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"/> // 注册接收器
标签:
原文地址:http://www.cnblogs.com/airpeng/p/4928645.html