2013/5/5 星期日 傍晚
問題產生:
在學校連WiFi上網,有時信號不好或者人比較多,Zhbit和Zhbit2就連不上,但是CMCC 和CMCC-Auto通常還能連上,而且速度比前兩個都快,只是有點不好,每次接上的時候要申請動態密碼(當然也可以用靜態密碼,就不用每次都輸入,只是我不喜歡把密碼直接記錄在瀏覽器上),申請到的密碼通過短信發到手機上,由于不想打開短信,而且信息的內容會在通知欄上顯示,所以每次都在通知欄上看密碼,但是顯示
的時間很短,大概就一秒鐘,稍不留神就記錯,而且還要輸入,覺得特不方便。
問題解決:
寫個小程序,能獲取有動態密碼短信里面的6位WiFi密碼,并復制到剪貼板上,那樣就能直接在輸入框粘貼密碼就可以了。
分析:
1.發送WiFi動態密碼的號碼都是10658029(不知道其他地方會不會不一樣),短信格式是:您申請的動態密碼為:XXXXXX 只有密碼 是數字,那樣提取密碼就很簡單了。
2. 靜態注冊BroadcastReceive廣播時,系統收到短信就會自動調用訂閱了接收短信的程序,所以不用為程序寫開機啟動。
程序代碼:
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="默認號碼為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;
//讀取短信內容
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("手機號碼:", to);
Log.i("內容:", Msg);
if (to.equals("10658029")) {
String Number = "";
//提取短信內的動態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);
// 復制到剪貼板
ClipboardManager cmb = (ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
// ClipData textCD = ClipData.newPlainText("stringText",
// Number);
// cmb.setPrimaryClip(textCD);
cmb.setText(Number);
Toast.makeText(context, "密碼:" + Number + "已復制到剪貼板",
Toast.LENGTH_LONG).show();
}
}
}
}
}
AndroidManifest.xml
---------------------------------------------------------------------------------------------------------------------------------------------------------------
增加接收短信權限:
<uses-permission android:/>
訂閱廣播:
<receiver android:>
<intent-filter>
<action android:></action>
</intent-filter>
</receiver>
效果:
在Uc瀏覽器上測試


|