2010-05-06 41 views
9

我正在嘗試實現自己的電話處理UI。如何通過單擊按鈕接受來電?

我想要做的是,如果有來電,將顯示來電號碼和圖片,如果按下按鈕,來電將被接受/應答。

相關的代碼是:

@Override 
    public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    answerButton = (Button) findViewById(R.id.pickup); 
    answerButton.setOnClickListener(new OnClickListener() { 
     public void onClick(final View v) { 
      Intent intent = new Intent("android.intent.action.ANSWER"); 
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(intent);   
     } 
    }); 

可悲的是,代碼不起作用。

ActivityNotFoundException:首先,如果我按我的回答按鈕拋出一個異常無活動處理意向{
行爲= android.intent.action.ANSWER

然後我說的在AndroidManifest.xml中輸入:

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

我再次運行應用程序,沒有任何異常了。但是,我懷疑來電不是真的被接受。因爲如果按下Android的屏幕應答按鈕(綠色按鈕),則接聽來電並且模擬器屏幕左上角還顯示綠色通話圖標,而我的應用不顯示。

我還在Android源代碼中閱讀了Phone應用程序的源代碼。 Phone類中有acceptCall()方法。但是,這些代碼似乎對我來說很難使用,因爲有在代碼中的許多進口報關,如:

import com.android.internal.telephony.Call; 
import com.android.internal.telephony.CallStateException; 
import com.android.internal.telephony.CallerInfo; 
import com.android.internal.telephony.CallerInfoAsyncQuery; 
import com.android.internal.telephony.Connection; 
import com.android.internal.telephony.MmiCode; 
import com.android.internal.telephony.Phone; 

而且,如果我在我的代碼添加這些進口,就會有太多的錯誤,如:
The import com.android.internal.telephony cannot be resolved

什麼是我的問題的正確和簡單的方法?

+0

看到鏈接:[http://mylifewithandroid.blogspot.com/2008/01/phonecalls.html](http://mylifewithandroid.blogspot。 COM/2008/01 /電話中。html) – 2011-09-16 07:05:25

回答

1

添加類別 「android.intent.category.DEFAULT」(Intent.CATEGORY_DEFAULT

+0

謝謝MasterGaurav! 但我已經在清單文件中添加了類別「android.intent.category.DEFAULT」。下面是代碼: <活動機器人:名稱=機器人 「TelephonyDemo。」:標籤= 「@串/ APP_NAME」 \t \t機器人:launchMode = 「singleTop」> \t \t <意圖濾波器> <操作機器人: NAME = 「android.intent.action.ANSWER」/> <類機器人:名字= 「android.intent.category.DEFAULT」/> \t 所以我不知道還有其他的原因。 – Armstrong 2010-05-07 07:24:00

+0

我打算在代碼中的意圖添加默認類別。 – 2010-05-07 10:38:50

1

意圖android.intent.action.ANSWER以某種方式並不如預期的工作。通過模擬藍牙按鈕來接聽來電,有一種解決方法。您可以從auto-answer項目中看到一個示例。

0

您需要創建一個廣播接收器,在您的手機正在響鈴時您將獲得該事件,之後您可以啓動所需的活動。在使用CUSTOM ROM之前,您無法替換默認的來電屏幕。 並且不要忘記在清單文件中設置廣播接收器的優先級。 一旦你得到了事件,你就可以使用反射來使用ITelephony對象,並且可以爲你提供接聽或拒絕接聽的方法。

0

這是使用com.android.internal.telephony包的可能性,但您必須在eclipse中找到使用此方法的一些方法,並且您的應用程序必須使用android源代碼編譯爲系統應用程序。

0

此更改接受呼叫的方法:

public static void acceptCall(Context context) 
{ 
    Intent buttonUp = new Intent(Intent.ACTION_MEDIA_BUTTON); 
    buttonUp.putExtra(Intent.EXTRA_KEY_EVENT, 
     new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HEADSETHOOK)); 
    context.sendOrderedBroadcast(buttonUp, "android.permission.CALL_PRIVILEGED"); 
} 
相關問題