2010-11-16 104 views
16

我在爲想寫一個小工具來顯示用戶的預付餘額,餘額等信息。在後臺撥打(並獲得響應)USSD代碼?

我想自動調用返回這個數據的USSD代碼(每個網絡必須有一個正則表達式) ,間隔(不經常,爲了節省電池)。這必須在後臺完成。我現在有一個應用程序運行ussd代碼並返回結果,所以我認爲這應該是可能的 - 但我不知道如何在後臺完成。

我已經看到了呼叫號碼的意圖,但我不知道如何得到結果,而且我也在想這個意圖會導致呼叫屏幕進入前臺?

另一種選擇是通過從運營商的網站/可能wap網站抓取結果來獲取數據,但這會導致用戶收取數據費用,所以我寧願使用USSD代碼的解決方案。

預先感謝任何幫助 - 只開始瞭解Android的,所以今天有相當多學習:)

+0

我實際上甚至不知道如果我可以從服務打電話 - 我試圖創建一個ACTION.CALL意圖,並用startActivity()發送它,但這會導致強制關閉,即使我設置了FLAG_ACTIVITY_NEW_TASK標誌。 – Jords 2010-11-20 09:19:20

+0

傻我,只是沒有正確的權限。它實際上是調用USSD代碼 - 但不在後臺。我想如果沒有撥號器顯示它的界面,你就無法進行android調用 - 我將不得不使用web選項。 – Jords 2010-11-20 22:44:14

+0

嗨Jords,我看到這個問題是在2年前問的,所以我希望自那時起事情發生了變化。我正在寫類似的申請(作爲我的文憑的一部分)。你能否幫我完成USSD任務?就像你我需要執行一個USSD調用並獲得結果(如果可能的話,在後臺執行)......如果您在此共享一些工作代碼,我將非常感激。謝謝 – vach 2013-10-30 09:12:13

回答

13

USSD尚不支持Android上工作。還有是它的一個功能要求:http://code.google.com/p/android/issues/detail?id=1285

+0

謝謝,這不是我要去的答案,但至少回答我的問題,並希望它會在薑餅。我很驚訝,我從來沒有發現,從我的搜索! – Jords 2010-11-21 04:30:11

+0

而我們仍然沒有它 – gkiko 2013-11-18 16:01:10

+0

看看從Picaso和Agarwal尚卡爾的答案,現在它是可能的 – Musa 2016-01-07 15:38:10

7

您可以使用下面的代碼來調用Android手機上的USSD代碼檢查平衡和等......

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); 
5

我不是完全肯定,但我認爲目前還不支持在Android USSD,但是你可以嘗試以下解決方法:

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

和你在哪裏獲取響應? – Bellash 2015-04-08 14:23:17

1

USSD呼叫interuptn尚不支持 位於Android

5

您可以通過下面的代碼發送USSD代碼,你也需要添加權限(這應該是棉花糖更新後,運行時間許可)

<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))); 

,您可以通過AccessibilityService

這裏讀USSD代碼是例如:

服務:

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" /> 

運行的代碼 - >啓用通過設置可訪問 - >輔助 - > [你的應用名稱] - >啓用。任務完成!