2013/5/5 星期日 傍晚
問(wèn)題產(chǎn)生:
在學(xué)校連WiFi上網(wǎng),有時(shí)信號(hào)不好或者人比較多,Zhbit和Zhbit2就連不上,但是CMCC 和CMCC-Auto通常還能連上,而且速度比前兩個(gè)都快,只是有點(diǎn)不好,每次接上的時(shí)候要申請(qǐng)動(dòng)態(tài)密碼(當(dāng)然也可以用靜態(tài)密碼,就不用每次都輸入,只是我不喜歡把密碼直接記錄在瀏覽器上),申請(qǐng)到的密碼通過(guò)短信發(fā)到手機(jī)上,由于不想打開短信,而且信息的內(nèi)容會(huì)在通知欄上顯示,所以每次都在通知欄上看密碼,但是顯示
的時(shí)間很短,大概就一秒鐘,稍不留神就記錯(cuò),而且還要輸入,覺(jué)得特不方便。
問(wèn)題解決:
寫個(gè)小程序,能獲取有動(dòng)態(tài)密碼短信里面的6位WiFi密碼,并復(fù)制到剪貼板上,那樣就能直接在輸入框粘貼密碼就可以了。
分析:
1.發(fā)送WiFi動(dòng)態(tài)密碼的號(hào)碼都是10658029(不知道其他地方會(huì)不會(huì)不一樣),短信格式是:您申請(qǐng)的動(dòng)態(tài)密碼為:XXXXXX 只有密碼 是數(shù)字,那樣提取密碼就很簡(jiǎn)單了。
2. 靜態(tài)注冊(cè)BroadcastReceive廣播時(shí),系統(tǒng)收到短信就會(huì)自動(dòng)調(diào)用訂閱了接收短信的程序,所以不用為程序?qū)戦_機(jī)啟動(dòng)。
程序代碼:
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: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=".MainActivity" android:orientation="vertical" >
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="歡迎使用本程序!" />
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="默認(rèn)號(hào)碼為10658029" /> </LinearLayout>
MainAcitiviy.java
---------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.example.getwifipwd;
import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.widget.Button; import android.widget.EditText;
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
@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; }
}
myBroad.java
---------------------------------------------------------------------------------------------------------------------------------------------------------------
package com.example.getwifipwd;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.ClipData;
import android.text.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;
public class myBroad extends BroadcastReceiver {
// private static final String action =
// "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
SmsManager sms = SmsManager.getDefault();
Bundle bundle = intent.getExtras();
String to = null;
String Msg = null;
//讀取短信內(nèi)容
if (bundle != null) {
Object[] pdus = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++)
messages[ i] = SmsMessage.createFromPdu((byte[]) pdus[ i]);
for (SmsMessage message : messages) {
Msg = message.getMessageBody();
to = message.getOriginatingAddress();
}
Log.i("手機(jī)號(hào)碼:", to);
Log.i("內(nèi)容:", Msg);
if (to.equals("10658029")) {
String Number = "";
//提取短信內(nèi)的動(dòng)態(tài)wifi密碼
for (int i = 0; i < Msg.length(); i++) {
if (Msg.charAt(i) >= '0' && Msg.charAt(i) <= '9') {
Number += Msg.charAt(i);
}
}
if (Number.length() == 6) {
Log.i("密碼", Number);
// 復(fù)制到剪貼板
ClipboardManager cmb = (ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
// ClipData textCD = ClipData.newPlainText("stringText",
// Number);
// cmb.setPrimaryClip(textCD);
cmb.setText(Number);
Toast.makeText(context, "密碼:" + Number + "已復(fù)制到剪貼板",
Toast.LENGTH_LONG).show();
}
}
}
}
}
AndroidManifest.xml
---------------------------------------------------------------------------------------------------------------------------------------------------------------
增加接收短信權(quán)限:
<uses-permission android:/>
訂閱廣播:
<receiver android:>
<intent-filter>
<action android:></action>
</intent-filter>
</receiver>
效果:
在Uc瀏覽器上測(cè)試


|