Pull to refresh

USSD в Android

USSD (Unstructured Supplementary Service Data)— стандартный сервис в сетях GSM, позволяющий организовать интерактивное взаимодействие между абонентом сети и сервисным приложением в режиме передачи коротких сообщений.
Как известно, Android не имеет API Для чтения USSD сообщений, далее я расскажу как решить эту проблему…

Как то столкнувшись с задачей отослать команду и принять 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>
    <Button
   android:text="@string/send"
   android:id="@+id/button1"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content">
    </Button>
</LinearLayout>

Вот что должно получиться:

Теперь предадим жизни приложению, напишем сам код получения результата USSD.
// не пишу все импорты, напишу только то, что не забудьте подключить класс USSD
import com.example.android.UssdMessage.USSD;

public class UssdmessageActivity extends Activity implements OnClickListener {
        /** Called when the activity is first created. */
        private TextView view;
        private AutoCompleteTextView number;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
                Button button = (Button) findViewById(R.id.button1);
                button.setOnClickListener(this);
                this.view = (TextView) findViewById(R.id.Text2);
                this.number = (AutoCompleteTextView) findViewById(R.id.Text1);
        }

        @Override
        public void onClick(View arg0) {
                String encodedHash = Uri.encode("#");
                call("*" + number.getText() + encodedHash);
                this.view.setText("");
        }

        protected void call(String phoneNumber) {
                try {
                        startActivityForResult(
                                        new Intent("android.intent.action.CALL", Uri.parse("tel:"
                                                        + phoneNumber)), 1);
                } catch (Exception eExcept) {
                        this.view.append("\n\n " + "\n" + eExcept.toString());
                }
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                USSD ussd = new USSD(4000,4000); // передается два параметра, задержка до и после (ms) создания сообщения
                if (ussd.IsFound())
                        this.view.append("\n"+ussd.getMsg());
                else
                        this.view.append(""+R.string.error_ussd_msg);
        }

}

Скриншот работы приложения:

Добавлю то, что класс написан так, что выводит в logcat отладочную информацию. На ой взгляд не сложный и удобный класс, который может помочь в решении Ваших задач.
Спасибо за внимание.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.