2

当用户开始拨打电话时,android 会提出选择,可以使用哪个应用程序拨打电话(如 Skype)。简单的问题 - 我的应用程序如何在该列表中以及我如何获取号码,哪个用户被放入系统拨号器?

我做了一个所有问题,这在两个答案中都有建议,但是,如果客户在电话拨号盘上按下呼叫,我仍然看到:

拨打电话: - Skype - 电话

并且列表中没有我的应用程序。

已编辑

现在该代码的问题已解决,现在我的应用程序在列表中并打开了:(错误>符号)

  <activity
        android:name=".PhonePadActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />

            <action android:name="android.intent.action.CALL" />
            <data android:scheme="tel" />
            <category android:name="android.intent.category.DEFAULT" />
            <action android:name="android.intent.action.CALL_PRIVILEGED" />
       </intent-filter>


    </activity>

问题的第二部分 - 获取用户在标准拨号盘中拨打的电话号码,但仍未解决:

onCreated 中的代码:

Intent intent = getIntent();

String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
Toast.makeText(this, "Call was made to-->>" + number, 5000).show();

给出空值。

第二版

上次我收到来自 Google 的通知,他们限制 CALL_PRIVILEGED(bcs 我们不支持他们的紧急呼叫。)如果没有 CALL_PRIVILEGED,我的应用程序不会再次出现在列表中。有人知道那件事的新解决方案吗?我现在正在与谷歌支持讨论这个问题,我们现在进行了一些迭代但没有成功。

4

3 回答 3

1

将您的 Activity 声明为将其添加到调用应用程序的选项列表中

<activity android:name="Makecall" >
        <intent-filter> 

            <action android:name="android.intent.action.CALL" />
           <data android:scheme="tel" />
           <category android:name="android.intent.category.DEFAULT" />
           <action android:name="android.intent.action.CALL_PRIVILEGED" />

        </intent-filter>
    </activity>

并调用任何号码Intent.ACTION_DIAL用作:

Uri numberuri = Uri.parse("tel:"  + edit_text_number);
Intent intent_call = new Intent(Intent.ACTION_DIAL, numberuri);
startActivity(intent_call);
于 2012-12-29T13:45:26.650 回答
0

您需要做的是在要拨打电话的 Activity 上设置 Intent 过滤器。您可以在 AndroidManifest.xml 文件中执行此操作。修改您的活动定义以包含此意图过滤器:

<intent-filter>
    <action android:name="android.intent.action.CALL" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:scheme="tel" />
</intent-filter>

要获取正在拨打电话的电话号码,请在广播接收器中使用以下方法,

public void onReceive(Context context, Intent intent) 
    {
        String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
        Toast.makeText(context, "Call was made to-->>" + number, 5000).show();

    }
于 2012-12-29T13:43:18.207 回答
0

要回答问题的第二部分,即如何从意图对象中提取电话号码,您可以调用:

String schemeSpecificPart = intent.getData().getSchemeSpecificPart();

如果您想将其解析为结构化对象,可以使用 Google 的 libphonenumber 库:https ://code.google.com/p/libphonenumber/

例如

PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
TelephonyManager manager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
Phonenumber.PhoneNumber number;
try {
     number = phoneUtil.parse(schemeSpecificPart, deviceCountry);
} catch (NumberParseException e) {
     // handle the exception
}
于 2013-05-30T06:08:51.867 回答