USSD(Unstructured Supplementary Service Data)は、GSMネットワークの標準サービスです。これにより、ショートメッセージを送信するモードで、ネットワークサブスクライバーとサービスアプリケーション間の対話型の対話を構成できます。
ご存じのように、AndroidにはUSSDメッセージを読み取るためのAPIがないため、この問題を解決する方法について説明します。
どういうわけか、私はコマンドを送信し、USSDメッセージを受信するタスクに直面しました。 USSD応答はBufferedReaderバッファーに格納されており、このバッファーからの情報を解析するためのサードパーティのUSSDクラスがあることがわかりました。
クラス自体は
ここにコピーでき
ます。次に、クラス自体を使用する実装を検討します。
最初に、アプリケーションインターフェイスを作成します。AutoCompleteTextView、TextView、Buttonがあります。
<!-?xml version = "1.0" encoding = "utf-8"?->
<linearlayout xmlns:android = " schemas.android.com/apk/res/android "
android:orientation = "vertical"
android:layout_width = "fill_parent"
android:layout_height = "fill_parent" >
<autocompletetextview
android:layout_width = "fill_parent"
android:text = ""
android:layout_height = "wrap_content"
android:inputtype = "phone | textUri"
android:id = "@ + id / Text1" >
<requestfocus > </ requestfocus >
</ autocompletetextview >
<textview
android:layout_width = "fill_parent"
android:id = "@ + id / Text2"
android:layout_height = "wrap_content" >
</ textview >
<ボタン
android:text = "@ string / send"
android:id = "@ + id / button1"
android:layout_width = "fill_parent"
android:layout_height = "wrap_content" >
</ボタン>
</ linearlayout >
ここには、次のインターフェイスがあります。

ここで、アプリケーションに命を吹き込み、USSDの結果を取得するためのコードを記述します。
//すべてのインポートを記述するのではなく、USSDクラスを接続することを忘れないように記述します
import com.example.android.UssdMessage.USSD ;
パブリック クラス UssdmessageActivity は Activityを実装し、 OnClickListenerを実装します{
/ **アクティビティが最初に作成されたときに呼び出されます。 * /
プライベート TextViewビュー。
プライベート AutoCompleteTextView番号。
上書きする
public void onCreate ( Bundle savedInstanceState ) {
スーパー 。 onCreate ( savedInstanceState ) ;
setContentView ( R. layout。main ) ;
Button button = ( ボタン ) findViewById ( R. id。Button1 ) ;
ボタン。 setOnClickListener ( これ ) ;
これ 。 view = ( TextView ) findViewById ( R. id。Text2 ) ;
これ 。 番号 = ( AutoCompleteTextView ) findViewById ( R. id。Text1 ) ;
}
上書きする
public void onClick ( arg0を表示 ) {
文字列 encodedHash = Uri。 エンコード ( "#" ) ;
call ( " * " + number。getText ( ) + encodedHash ) ;
これ 。 表示します 。 setText ( "" ) ;
}
保護された void call ( String phoneNumber ) {
{
startActivityForResult (
new Intent ( " android。intent。action。CALL "、 Uri。parse ( "tel : "
+ phoneNumber ) ) 、 1 ) ;
} catch ( 例外 eExcept ) {
これ 。 表示します 。 append ( "nn" + "n" + eExcept。toString ( ) ) ;
}
}
上書きする
protected void onActivityResult ( int requestCode、 int resultCode、Intent data ) {
USSD ussd = 新しい USSD ( 4000、4000 ) ; // 2つのパラメーターが渡されます。メッセージ作成の前後の遅延(ms)
if ( ussd。IsFound ( ) )
これ 。 表示します 。 append ( "n" + ussd。getMsg ( ) ) ;
他に
これ 。 表示します 。 append ( "" + R. string。error_ussd_msg ) ;
}
}
また、次の権限を追加することを忘れないでください(そうしないと機能しません)
<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission> <uses-permission android:name="android.permission.CALL_PRIVILEGED"></uses-permission> <uses-permission android:name="android.permission.READ_LOGS"></uses-permission>
アプリケーションのスクリーンショット:

クラスは、logcatでデバッグ情報を表示するように作成されていることを追加します。
私の意見では、問題を解決するのに役立つ複雑で便利なクラスではありません。
ご清聴ありがとうございました。
.apkファイルの
ダウンロードソース
ダウンロード