Androidはショートメッセージの検証コードを実現して自動で記入します。
Androidアプリケーションはしばしば登録登録機能に関連しますが、多くの登録やパスワード変更機能はしばしばショートメッセージの検証コードを入力する必要があります。通常、ユーザーはショートメッセージを受信すると、アプリケーションを最小限にしてメールを確認し、検証コードを記入する必要があります。
原理解説:
主にメール情報をリアルタイムで取得することです。ContentObserver類の使用に関連します。ContentProviderを使ってショートメールデータベースの変化をモニターし、ユーザー定義のContentObserverでワンChangeを実現し、特定の携帯電話番号のショートメッセージを傍受し、充填が必要な場所に情報を傍受する。
ContentObserverは、コンテンツの傍受者です。携帯電話にメールを送ると、ContentObserverの指定方法を自動的に呼び出してメールの変化を通知します。次にメールの内容を読んで、検証コードを取り出して自動的に入力ボックスに記入します。これで自動記入機能が完成します。ContentObserver類は主にメールの内容の変化を監督して、ここでandroidの常用する1種の設計のモードつまり観察者のモードに関連します。
コンテントObserver解説-観察者モード:
観察者モード(時にはリリースモードと呼ばれる)-購読(Subscribe)モード、モデル-ビュー(View)モード、ソース-聴取者(Listener)モードまたはスレーブモード)は、ソフトウェア設計モードの一種である。このようなモードでは、目的物は、その観察者に依存するすべてのものを管理し、その自身の状態が変化したときに、自ら通知を出す。これは、一般に、観察者によって提供される方法を呼び出して実現される。このようなモードは、通常、イベント処理システムを実現するために用いられる。
観察者モード(Observer)は完璧に観察者と観察された対象を分離します。観察者モードはモジュール間で明確な限界を定めており、アプリケーションのメンテナンス性と再利用性を高めている。
観察者設計モードは、オブジェクト間の1対の複数の依存関係を定義し、オブジェクトの状態が変化すると、そのオブジェクトに依存するすべてのオブジェクトが通知され、自動的に更新されます。
特定のUriによるデータベースの変化を観察(捕捉)することを目的として、データベース技術におけるトリガーのような対応をしています。ConttentObserverで観察されたUriが変化すると、トリガーがトリガされます。
•観察者(すなわち私たちの応用):Observerは、観察対象(Subject)に自分を登録し、観察対象者は観察者を一つの容器に保存する。
•観察されている(すなわちシステムのショートメッセージアプリケーション):観察対象に何らかの変化が生じ(図中のSomeChangeのような)、登録済みの観察者を容器から入手し、変化を観察者に通知する。
•観察を取り消す:観察者は観察者に観察を撤回するように告げ、観察者は容器から観察者を取り除く。
具体的には、私達のプロジェクトの中で、つまりアプリケーションが実行を開始したばかりの時に、私達の携帯電話システムのショートメッセージアプリケーションに観察者を登録します。メールが変化した時、登録した観察者にメールアプリが変化したことを知らせます。私達の観察者はこのような通知を受けた時、コードによって操作を行います。自動で認証コードを記入する機能を実現します。私たちが必要な機能を完成したら、観察を取り消して登録を解除します。観察者は容器から観察者を削除します。観察者は削除された後、メールの内容変更通知を受けない。
特定のユリを観察する手順は以下の通りです。
1.私達の特定のContentObserver派生類を作成するには、父親の構造方法を重載しなければならず、オンChange()の方法を再負荷して、フィードバック後の機能を処理して実現しなければならない。
2.context.getContentResolover()を利用してContentResoloveオブジェクトを獲得し、続いてregister ContentObserver()を呼び出してコンテンツ観察者を登録する。
3.ContentObserverのライフサイクルはActivityやServiceなどに同期していないため、不要な場合は手動でunregister ContentObserver()を呼び出して登録をキャンセルします。
activitymain.xml
content://sms/inbox 受信箱
content://sms/sent 送信済み
content://sms/draft 草稿
content://sms/outbox 配送箱 (送信中のメッセージ)
content://sms/failed 送信に失敗しました
content://sms/queued 送信待ちリスト (たとえば飛行モードをオンにすると、送信待ちリストにメッセージが表示されます。
もちろん、メールの読み込み権限を追加することを忘れないでください。
<uses-permission android:name=“android.permission.READ_”SMS'/>
ソースのダウンロード:Androidショートメッセージの検証コードは自動的に記入します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。
原理解説:
主にメール情報をリアルタイムで取得することです。ContentObserver類の使用に関連します。ContentProviderを使ってショートメールデータベースの変化をモニターし、ユーザー定義のContentObserverでワンChangeを実現し、特定の携帯電話番号のショートメッセージを傍受し、充填が必要な場所に情報を傍受する。
ContentObserverは、コンテンツの傍受者です。携帯電話にメールを送ると、ContentObserverの指定方法を自動的に呼び出してメールの変化を通知します。次にメールの内容を読んで、検証コードを取り出して自動的に入力ボックスに記入します。これで自動記入機能が完成します。ContentObserver類は主にメールの内容の変化を監督して、ここでandroidの常用する1種の設計のモードつまり観察者のモードに関連します。
コンテントObserver解説-観察者モード:
観察者モード(時にはリリースモードと呼ばれる)-購読(Subscribe)モード、モデル-ビュー(View)モード、ソース-聴取者(Listener)モードまたはスレーブモード)は、ソフトウェア設計モードの一種である。このようなモードでは、目的物は、その観察者に依存するすべてのものを管理し、その自身の状態が変化したときに、自ら通知を出す。これは、一般に、観察者によって提供される方法を呼び出して実現される。このようなモードは、通常、イベント処理システムを実現するために用いられる。
観察者モード(Observer)は完璧に観察者と観察された対象を分離します。観察者モードはモジュール間で明確な限界を定めており、アプリケーションのメンテナンス性と再利用性を高めている。
観察者設計モードは、オブジェクト間の1対の複数の依存関係を定義し、オブジェクトの状態が変化すると、そのオブジェクトに依存するすべてのオブジェクトが通知され、自動的に更新されます。
特定のUriによるデータベースの変化を観察(捕捉)することを目的として、データベース技術におけるトリガーのような対応をしています。ConttentObserverで観察されたUriが変化すると、トリガーがトリガされます。
•観察者(すなわち私たちの応用):Observerは、観察対象(Subject)に自分を登録し、観察対象者は観察者を一つの容器に保存する。
•観察されている(すなわちシステムのショートメッセージアプリケーション):観察対象に何らかの変化が生じ(図中のSomeChangeのような)、登録済みの観察者を容器から入手し、変化を観察者に通知する。
•観察を取り消す:観察者は観察者に観察を撤回するように告げ、観察者は容器から観察者を取り除く。
具体的には、私達のプロジェクトの中で、つまりアプリケーションが実行を開始したばかりの時に、私達の携帯電話システムのショートメッセージアプリケーションに観察者を登録します。メールが変化した時、登録した観察者にメールアプリが変化したことを知らせます。私達の観察者はこのような通知を受けた時、コードによって操作を行います。自動で認証コードを記入する機能を実現します。私たちが必要な機能を完成したら、観察を取り消して登録を解除します。観察者は容器から観察者を削除します。観察者は削除された後、メールの内容変更通知を受けない。
特定のユリを観察する手順は以下の通りです。
1.私達の特定のContentObserver派生類を作成するには、父親の構造方法を重載しなければならず、オンChange()の方法を再負荷して、フィードバック後の機能を処理して実現しなければならない。
2.context.getContentResolover()を利用してContentResoloveオブジェクトを獲得し、続いてregister ContentObserver()を呼び出してコンテンツ観察者を登録する。
3.ContentObserverのライフサイクルはActivityやServiceなどに同期していないため、不要な場合は手動でunregister ContentObserver()を呼び出して登録をキャンセルします。
activitymain.xml
<RelativeLayout 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">
<EditText
android:id="@+id/et_validateCode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:ems="10" />
</RelativeLayout>
MainActivity.java
package smsdemo.com.smsdemo;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.EditText;
/**
*
*
* Created by huangminzheng on 16/3/15.
*/
public class MainActivity extends Activity {
public static final int MSG_RECEIVED_CODE = 1;
private EditText metValidateCode = null;
private SmsObserver mObserver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
metValidateCode = (EditText) findViewById(R.id.et_validateCode);
mObserver = new SmsObserver(MainActivity.this, mHandler);
Uri uri = Uri.parse("content://sms");
//
getContentResolver().registerContentObserver(uri, true, mObserver);
}
@Override
protected void onPause() {
super.onPause();
//
getContentResolver().unregisterContentObserver(mObserver);
}
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == MSG_RECEIVED_CODE) {
String code = (String) msg.obj;
metValidateCode.setText(code);
}
}
};
}
SmsObserver.java
package smsdemo.com.smsdemo;
import android.content.Context;
import android.database.ContentObserver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Handler;
import android.util.Log;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by huangminzheng on 16/3/15.
*
*
*/
public class SmsObserver extends ContentObserver{
private Context mContext;
private Handler mHandler;
public SmsObserver(Context context, Handler handler) {
super(handler);
mContext = context;
mHandler = handler;
}
@Override
public void onChange(boolean selfChange, Uri uri) {
super.onChange(selfChange, uri);
Log.d("main", "SMS has changed!");
Log.d("main", uri.toString());
// , ,return
if (uri.toString().equals("content://sms/raw")) {
return;
}
getValidateCode();//
}
/**
*
*/
private void getValidateCode() {
String code = "";
Uri inboxUri = Uri.parse("content://sms/inbox");
Cursor c = mContext.getContentResolver().query(inboxUri, null, null, null, "date desc");//
if (c != null) {
if (c.moveToFirst()) {
String address = c.getString(c.getColumnIndex("address"));
String body = c.getString(c.getColumnIndex("body"));
//13162364720
if (!address.equals("13162364720")) {
return;
}
Log.d("main", " :" + address + " ," + " :" + body);
Pattern pattern = Pattern.compile("(\\d{6})");
Matcher matcher = pattern.matcher(body);
if (matcher.find()) {
code = matcher.group(0);
Log.d("main", " : " + code);
mHandler.obtainMessage(MainActivity.MSG_RECEIVED_CODE, code).sendToTarget();
}
}
c.close();
}
}
}
メールのUriにはいくつかの種類があります。 content://sms/inbox 受信箱
content://sms/sent 送信済み
content://sms/draft 草稿
content://sms/outbox 配送箱 (送信中のメッセージ)
content://sms/failed 送信に失敗しました
content://sms/queued 送信待ちリスト (たとえば飛行モードをオンにすると、送信待ちリストにメッセージが表示されます。
もちろん、メールの読み込み権限を追加することを忘れないでください。
<uses-permission android:name=“android.permission.READ_”SMS'/>
ソースのダウンロード:Androidショートメッセージの検証コードは自動的に記入します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。