Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/219.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
强制Android应用程序对一段代码使用旧API_Android_Bluetooth_Hfp - Fatal编程技术网

强制Android应用程序对一段代码使用旧API

强制Android应用程序对一段代码使用旧API,android,bluetooth,hfp,Android,Bluetooth,Hfp,几天来,我一直在试图找到一种方法,在使用较新API构建的应用程序中使用以前的Android API实现的方法 具体地说,我正在使用startbluetothsco()通过蓝牙SCO通道发起虚拟呼叫。然而,在API 17中,这一点非常有效,在API 18之后的startBluetoothSco()中,它会打开一个原始SCO通道,而不是一个虚拟调用(如开发人员文档中所述:)。我正在使用的附件与原始SCO通道没有任何关系 在这种情况下,我不能选择使用API 17构建应用程序,因为其他开发人员可能会在不

几天来,我一直在试图找到一种方法,在使用较新API构建的应用程序中使用以前的Android API实现的方法

具体地说,我正在使用
startbluetothsco()
通过蓝牙SCO通道发起虚拟呼叫。然而,在API 17中,这一点非常有效,在API 18之后的
startBluetoothSco()
中,它会打开一个原始SCO通道,而不是一个虚拟调用(如开发人员文档中所述:)。我正在使用的附件与原始SCO通道没有任何关系

在这种情况下,我不能选择使用API 17构建应用程序,因为其他开发人员可能会在不久的将来需要更高版本API的功能

我确实认为我可以将蓝牙代码包装到一个库项目中,用API 17构建它,然后将其集成到主应用程序中,然后在API 18中构建。不幸的是,这不起作用;操作系统似乎看到了这样一个事实:正在从使用API 18构建的应用程序调用
startBluetoothSco()
,因此使用了该方法的API 18实现

如果有人能建议我如何强制API 18应用程序使用API 17实现,我将非常感激

谢谢

在这种情况下,我不能选择使用API 17构建应用程序,因为其他开发人员可能会在不久的将来需要更高版本API的功能

你用什么建造并不重要。你在做什么才是最重要的。如果您是说,从API级别18开始,
startBluetoothSco()
不适用于您的硬件,那么Android 4.3+设备将不适用于您的硬件

不幸的是,这不起作用;操作系统似乎看到startBluetoothSco()是从一个使用API 18构建的应用程序中调用的,因此使用了该方法的API 18实现

它使用“API18方法实现”,因为如果它是安卓4.3设备,这就是它的全部

如果有人能建议我如何强制API 18应用程序使用API 17实现,我将非常感激


在设备上安装基于Android 4.2的ROM模块。

是否在支持库中?我将创建两个使用startBlueToothSco()的独立对象,并为每个对象导入所需API级别的正确类。然后在应用程序内根据Android版本决定使用哪一个。谢谢你的回答-但是,我在同一台设备上尝试了两种不同版本的应用程序,一种是API 17,另一种是API 18(运行Android 4.4.2的Nexus 4)。API 17构建确实正确地执行了调用,因此在本例中,实现似乎受应用程序的API级别而不是操作系统的API级别的影响。@ErnArrowsmith:我怀疑您的应用程序中有其他一些变化(例如,
android:targetSdkVersion
)是“影响”。您是对的,目标SDK在应用程序中已更改,因此可能允许应用程序在Android 4.4.2设备上启动虚拟调用。@ErnArrowsmith:这是一种相当常见的模式
android:targetSdkVersion
允许android支持预期较旧行为的应用程序,并且完全有可能以这种方式处理
startBluetoothSco()
。问题是,最终,其他因素可能会导致您希望将
targetSdkVersion
提高。理想情况下,您可以找到一些方法来支持硬件的新蓝牙行为,尽管您可能需要一些时间来做到这一点,保持
targetSdkVersion
足够低,以同时获得旧的行为。