2015-01-21 51 views
1

我一直在研究一個android應用程序的概念,其中應用程序必須自動撥打一些特殊的USSD代碼,以便在用戶通過應用程序中的快捷方式啓動服務時啓動用戶感興趣的某些電信服務。有沒有辦法在Android上強制自動撥號特殊號碼?

我發現的問題是,當應用程序嘗試自動撥打這樣的短代碼或USSD號碼時,手機的操作系統(或它是呼叫意圖)不會自動撥號,而是提供用戶使用撥號盤中的代碼/號碼,因此用戶必須手動發起呼叫 - 這種打敗我的意圖是允許用戶只需點擊一下即可發起服務 - 即快捷方式。

目前,這是我如何啓動這些調用:

  intent = new Intent(Intent.ACTION_DIAL); 

      intent.setData(Uri.parse("tel:" + number.trim())); 

      try { 
       activity.startActivity(intent); 
      } catch (Exception e) { 
       Log.d(Tag, e.getMessage()); 
      } 

有趣的是,一個數字,如256772777000會自動撥號,自動啓動用戶到電話,但號碼/代碼,因爲911,* 112#,* 1 * 23#等不會。

那麼,我需要做什麼改變,或者這是不可能的呢?

UPDATE

其實,看着其他的應用程序中,我autodialling用戶指定的號碼,與上面的代碼試圖將問題自動撥號USSD代碼是不是使用intent.ACTION_CALL,我用intent.ACTION_DIAL - 這絕對只是提示用戶撥打號碼,而不直接呼叫。當我解決這個問題時,該應用程序現在按預期工作。請參閱下面的答案...

代碼示例是最受歡迎的。

+0

Android的指導性設計理念之一就是你不能做任何可能花費用戶金錢或危害他們隱私的事情。如果您可以通過Java API完成任務,那麼撥打號碼正是您需要做的根本事情。 – 2015-01-21 08:42:24

+0

你確定當你使用數字如「+256772777000」,Android是自動撥號嗎?我複製粘貼你的代碼,但它只是顯示撥號盤,我不得不明確撥打電話,手動。在關於ACTION_DIAL的Android文檔中也寫了同樣的內容:這顯示了一個用戶界面,撥打的號碼允許用戶明確發起呼叫。 – AADProgramming 2015-01-21 12:54:14

+0

我想你的意思是ACTION_CALL? – AADProgramming 2015-01-21 13:29:34

回答

0

實際上,儘管有些人聲稱Android會阻止這樣的功能。當我看着代碼在我的舊版應用的一個自動撥打用戶指定的號碼,我發現它的解決方案是:

  intent = new Intent(Intent.ACTION_CALL); 

      intent.setData(Uri.parse("tel:" + number.trim())); 

      try { 
       activity.startActivity(intent); 
      } catch (Exception e) { 
       Log.d(Tag, e.getMessage()); 
      } 

可正常工作 - USSD代碼獲得自動撥打上面的代碼運行時, 。使用這種方法的時候要注意的唯一重要的事情,是你有下列權限添加到您的清單:

<uses-permission android:name="android.permission.CALL_PHONE" /> 

所以,在更新我的問題,我原來的方法的問題表示用intent.ACTION_DIAL而不是intent.ACTION_CALL

相關問題