10

我正在尝试实现自己的电话处理 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:未找到处理 Intent {
act=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

我的问题的正确和简单的方法是什么?

4

5 回答 5

1

添加类别“ android.intent.category.DEFAULT”(Intent.CATEGORY_DEFAULT

于 2010-05-07T06:57:11.150 回答
1

意图android.intent.action.ANSWER以某种方式无法按预期工作。有一种解决方法是模拟蓝牙按钮来接听来电。您可以从自动回答项目中看到一个示例。

于 2011-05-19T03:31:58.263 回答
0

您需要创建一个广播接收器,当您的手机响铃时您将在其中收到事件,然后您可以启动所需的活动。在使用 CUSTOM ROM 之前,您无法替换默认的来电屏幕。并且不要忘记在清单文件中设置广播接收器的优先级。一旦你得到事件,你可以通过反射来使用 ITelephony 的对象。这可以为你提供接听或拒绝呼叫的方法。

于 2012-01-02T03:19:51.673 回答
0

使用com.android.internal.telephony包可以做到这一点,但是您必须找到在 eclipse 中使用此方法的方法,并且您的应用程序必须使用 android 源代码编译为系统应用程序。

于 2012-06-18T01:39:38.757 回答
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");
} 
于 2014-02-22T06:10:20.310 回答