我想在android中使用BluetoothA2DPSink服务, 它是一个隐藏的类,但我构建了一个修改过的SDK和ROM,现在Android工作室可以看到它。 问题是我无论何时尝试都无法使用它 ' BluetoothA2DPSink sink = new BluetoothA2DPSink()' 我收到此错误:" BluetoothA2DPSink()在&android;蓝牙.BluetoothA2dpSink'中未公开。不能从外包装中加入"。 我验证了它,它实际上是公开的: "公共最终类BluetoothA2dpSink实现了BluetoothProfile {..." 我该如何使用它的方法? 任何帮助将不胜感激。
答案 0 :(得分:3)
如果您正确粘贴了错误消息,问题不在于类,而在于构造函数。请注意“BluetoothA2DPSink()中的括号在'android.bluetooth.BluetoothA2dpSink'中不公开。不能从外部包接收” - 这是对构造函数的引用,而不是类。确保零参数构造函数为public
。
答案 1 :(得分:1)
尝试以下代码。它是使用反射完成的。您不能通过调用构造函数来简单地创建对象。您还需要使用另一个类BluetoothProfile.java。
对象mBluetoothA2DPSink;
/**
* This function will connect to A2DPsink profile of the server device to manage audio profile connection
*/
public void getBluetoothA2DPsink() {
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
try {
final int A2DPprofile = BluetoothProfile.class.getField("A2DP_SINK").getInt(null);
BluetoothProfile.ServiceListener mProfileListener1 = new BluetoothProfile.ServiceListener() {
public void onServiceConnected(int profile, BluetoothProfile proxy) {
if (profile == A2DPprofile) {
mBluetoothA2DPSink = proxy;
}
}
public void onServiceDisconnected(int profile) {
if (profile == A2DPprofile) {
mBluetoothA2DPSink = null;
try {
mContext.unregisterReceiver(mA2DPReciever);
} catch (IllegalArgumentException e) {
Log.e(TAG, e.getMessage());
}
}
}
};
// Establish connection to the proxy.
mBluetoothAdapter.getProfileProxy(mContext, mProfileListener1, A2DPprofile);
} catch (NoSuchFieldException | IllegalAccessException e) {
Log.e(TAG, e.getMessage());
}
}