标签: telephony

如何检测电话何时接听或拒绝

当电话铃响时,我设法准备了一项活动.现在我需要知道如何取消这个活动,当我打电话或拒绝电话时.我是否打电话给EXTRA_STATE_IDLE?EXTRA_STATE_OFFHOOK?

有任何想法吗?

<receiver android:name=".IncomingBroadcastReceiver">                     
        <intent-filter>                                                   
            <action android:name="android.intent.action.PHONE_STATE"/>   
        </intent-filter>
    </receiver> 



public class IncomingBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    // If an incoming call arrives
    if (state.equals(TelephonyManager.EXTRA_STATE_RINGING))
    { //Did my work }
Run Code Online (Sandbox Code Playgroud)

android telephony android-intent

23
推荐指数
3
解决办法
4万
查看次数

在呼叫中的上行链路上发送DTMF音调

我正在开展一个项目,要求我的应用程序能够在活动呼叫期间在语音的上行链路频率上发送DTMF音调.

我的两个条件是:

  • 我们不使用定制的Android平台
  • 我们不需要根电话

我花了几天时间做作业,并且我知道当前的SDK /标准API不支持通话中的DTMF发送.但是,通过使用相关的类com.android.internal.telephony我希望模仿本机Phone应用程序如何做到这一点.我在网站上关注如何使用标准第三方应用程序的内部API.

我还设置了Android OS开发环境,并且能够在模拟器上以调试模式运行Phone应用程序以确定其内部工作方式.

我在股票标准模拟器上尝试了各种方法,但我得到的错误是:

  1. 尝试使用android.uid.phone的sharedUserId基于Phone.apk的源安装重命名的应用程序后,我得到:

    安装错误:INSTALL_FAILED_SHARED_USER_INCOMPATIBLE

    毫无疑问,由于我没有系统证书来签署它.

  2. 在尝试根据Phone.apk来源的相关DTMF音调发送代码编写自定义应用程序后,在设置PhoneFactory时出现以下错误;

    java.lang.SecurityException:Permission Denial:不允许发送广播android.provider.Telephony.SPN_STRINGS_UPDATED.

    毫无疑问,由于Android应用程序没有正确的权限,尽管AndroidManifest.xml设置的权限与Phone.apk相同.

我不知道还能尝试什么.有没有人有什么建议?

先谢谢,西蒙.

android telephony internal dtmf in-call

21
推荐指数
2
解决办法
3万
查看次数

开始使用Asterisk的最佳方法是什么?

我有兴趣了解有关Asterisk(开源PBX)的更多信息,所以我想我会尝试为我的家建立一个"爱好"系统.只需要为我的家人提供一个满满的语音邮件系统.也就是说,直到我发现Digium的TDM11B套件成本超过500美元(!),如果我想获得带有回声消除功能的FXO/FXS卡.

我的问题是:学习Asterisk的最佳方法是什么?此外,如果我只是想在家中获得一个灵活的语音邮件版本,那么我可以做到这一点,而无需购买昂贵的卡来连接到PSTN吗?

谢谢,

  • 约翰

telephony asterisk

20
推荐指数
3
解决办法
6364
查看次数

如何检测设备是否能够进行呼叫和消息传递

一些设备即.Galaxy Tablet 10.1只能发短信,但无法拨打电话.像Asus Transformer这样的其他设备甚至没有SIM卡.

如何检测设备是否可以拨打电话?如何检测设备是否可以发送短信?

android telephony

17
推荐指数
3
解决办法
9047
查看次数

17
推荐指数
2
解决办法
5万
查看次数

android默认制作默认短信应用程序

所以我在这里遵循这个教程,将我的短信设置为默认,但由于某种原因,我的代码无效.我试图尽可能多地查看,但所有内容都指向同一个教程或已经过时.我也需要接收器吗?谁能解释我做错了什么?

代码:

@Override
protected void onResume()
{
    super.onResume();
    Log.i("MainAcitvity", "On Resume Called");
    // Only do these checks/changes on KitKat+, the "mSetDefaultSmsLayout" has its visibility
    // set to "gone" in the xml layout so it won't show at all on earlier Android versions.
    final String myPackageName = getPackageName();

    if (Utility.hasKitKat())
    {
        if (Utility.isDefaultSmsApp(this))
        {
            // This app is the default, remove the "make this app the default" layout and
            // enable message sending components.
            mSetDefaultSmsLayout.setVisibility(View.GONE);
        }
        else
        {
            Log.i("MainActivity", …
Run Code Online (Sandbox Code Playgroud)

sms android telephony default

16
推荐指数
1
解决办法
2万
查看次数


如何在Android 8.0 Oreo上以编程方式结束来电

截至到Android 7.1,有可能最终通过来电ITelephony.endCall()方法,并给予您的应用程序的权限android.permission.CALL_PHONEandroid.permission.READ_PHONE_STATE.

在做同样的事情时Android 8.0 Oreo (API 26),我得到这个错误

12-09 18:11:25.195 16833-16833/li.doerf.leavemealone E/TelephonyServiceCallHangup:缺少权限MODIFY_PHONE_STATE,无法挂断电话

由于MODIFY_PHONE_STATE是受保护的权限,我的应用无法获取.有没有办法以编程方式结束来电Android 8.0+

android telephony android-permissions android-8.0-oreo

14
推荐指数
1
解决办法
3388
查看次数

TelephonyManager 在 Android 12 上弃用了 Listen() CALL_STATE_RINGING

当我的应用程序位于前台时,我想监听是否有电话来电。

以前是这样的,但现在不推荐使用listen():

val tm = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
            tm.listen(object : PhoneStateListener() {
                override fun onCallStateChanged(state: Int, phoneNumber: String?) {
                    super.onCallStateChanged(state, phoneNumber)
                    when (state) {
                        TelephonyManager.CALL_STATE_RINGING -> transcribingAudioConsumer.stopTranscription(null)
                        else -> {}
                    }
                }
            }, PhoneStateListener.LISTEN_CALL_STATE)
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的方法,但找不到正确的方法来实现它。

         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
                        tm.registerTelephonyCallback({ it.run() }, MyPhoneStateListener())
                    }
Run Code Online (Sandbox Code Playgroud)
  @RequiresApi(Build.VERSION_CODES.S)
    class MyPhoneStateListener : TelephonyCallback(), TelephonyCallback.CallStateListener {
        override fun onCallStateChanged(state: Int) {
            when (state) {
                TelephonyManager.CALL_STATE_RINGING -> {
                    Timber.e("omg RING")
                }

                TelephonyManager.CALL_STATE_OFFHOOK -> {
                    Timber.e("omg hook")
                }
                TelephonyManager.CALL_STATE_IDLE -> {
                    Timber.e("omg idle")
                }
            }
        } …
Run Code Online (Sandbox Code Playgroud)

android telephony telephonymanager android-12

14
推荐指数
1
解决办法
2万
查看次数

如何获得当前的细胞信号强度?

我想存储细胞信号强度,我这样做:

private class GetRssi extends PhoneStateListener {
    @Override
    public void onSignalStrengthsChanged(SignalStrength signalStrength) {
        super.onSignalStrengthsChanged(signalStrength);
        Variables.signal = signalStrength.getGsmSignalStrength();


    }

}
Run Code Online (Sandbox Code Playgroud)

好的,但只有在它发生变化时才会运行.我需要当前的信号强度.

有没有办法只询问当前的信号强度?

android telephony

13
推荐指数
2
解决办法
2万
查看次数