Вызовите (и получите ответ) код USSD в фоновом режиме?

Я хочу написать виджет, отображающий баланс предоплаты пользователей, оставшиеся данные и т. Д.

Я думаю о автоматическом вызове USSD-кода, который возвращает эти данные (должен иметь регулярное выражение для каждой сети) с интервалами (не часто, чтобы сэкономить аккумулятор). Это нужно сделать в фоновом режиме. У меня есть приложение в настоящий момент, который запускает код ussd и возвращает результат, поэтому я думаю, что это должно быть возможно, но я не уверен, как это будет сделано в фоновом режиме.

Я видел намерения для вызова номера, но я не уверен, как получить результат, и я также думаю, что это намерение приведет к тому, что экран вызова появится на переднем плане?

Другой вариант – получить данные по экрану, собирая результат с веб-сайта перевозчика или, возможно, на wap-сайте, но это приведет к сбору данных для пользователя, поэтому я бы предпочел решение с использованием кода USSD.

Заранее спасибо за любую помощь – только начали работать над пониманием Android сегодня, поэтому стало довольно много, чтобы учиться 🙂

USSD пока не поддерживается на Android. Для этого есть запрос функции: http://code.google.com/p/android/issues/detail?id=1285

Вы можете использовать следующий код для вызова кодов ussd на Android-телефоне, чтобы проверить баланс и т. Д. ……

String s=calledittext.getText.toString();//calledittext is editText on the //screen from which can get the number if((s.startsWith("*"))&&(s.endsWith("#"))){ //if true then it is a USSD call---- callstring=s.substring(0, s.length()-1); callstring=callstring+Uri.encode("#"); Log.d("CALL TYPE---------->", "USSD CALL"); }else{ callstring=s; Log.d("CALL TYPE---------->", "Not a USSD CALL"); //Intent i=new Intent(android.content.Intent.ACTION_CALL,Uri.parse("tel:"+output.getText().toString())); //startActivity(i); } Intent i=new Intent(android.content.Intent.ACTION_CALL,Uri.parse("tel:"+callstring)); startActivity(i); 

Я не совсем уверен, но я думаю, что USSD еще не поддерживается на Android, однако вы можете попробовать это обходное решение:

 startActivity(new Intent("android.intent.action.CALL",Uri.parse("tel:*123" + Uri.encode("#"))); 

Вы можете отправить код USSD по коду, а также вам нужно добавить разрешение (это должно быть разрешение времени выполнения после обновления Marshmallow)

  <uses-permission android:name="android.permission.CALL_PHONE" /> String code = "*" + Uri.encode("#") + 456 + Uri.encode("#"); startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:" + code))); 

И вы можете читать коды USSD через AccessibilityService

Вот пример:

Обслуживание:

 public class USSDService extends AccessibilityService { private static final String TAG = "USSDService"; @Override public void onAccessibilityEvent(AccessibilityEvent event) { Log.d(TAG, "onAccessibilityEvent"); String text = event.getText().toString(); Log.d(TAG, text); } } @Override public void onInterrupt() { } @Override protected void onServiceConnected() { super.onServiceConnected(); Log.d(TAG, "onServiceConnected"); AccessibilityServiceInfo info = new AccessibilityServiceInfo(); info.flags = AccessibilityServiceInfo.DEFAULT; info.packageNames = new String[]{"com.android.phone"}; info.eventTypes = AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED; info.feedbackType = AccessibilityServiceInfo.FEEDBACK_GENERIC; setServiceInfo(info); } } 

AndroidManifest.xml:

 <service android:name=".services.USSDService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE"> <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> <meta-data android:name="android.accessibilityservice" android:resource="@xml/config_service" /> // created below </service> 

Res / xml / config_service.xml:

 <?xml version="1.0" encoding="utf-8"?> <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android" android:accessibilityEventTypes="typeAllMask" android:accessibilityFeedbackType="feedbackSpoken" android:accessibilityFlags="flagDefault" android:canRetrieveWindowContent="true" android:description="@string/accessibility_description" android:notificationTimeout="100" android:packageNames="com.cootf.sims" android:settingsActivity="com.example.android.accessibility.ServiceSettingsActivity" /> 

Запустить код -> Включить доступ через Настройки -> Доступность -> [Имя вашего приложения] -> Включить. Работа выполнена!

USSD call interuptn пока не поддерживается n Android