无法实例化PUBLIC类,Android工作室表示它不公开

时间:2016-04-02 18:01:51

标签: java android

我想在android中使用BluetoothA2DPSink服务, 它是一个隐藏的类,但我构建了一个修改过的SDK和ROM,现在Android工作室可以看到它。 问题是我无论何时尝试都无法使用它 ' BluetoothA2DPSink sink = new BluetoothA2DPSink()' 我收到此错误:" BluetoothA2DPSink()在&android;蓝牙.BluetoothA2dpSink'中未公开。不能从外包装中加入"。 我验证了它,它实际上是公开的: "公共最终类BluetoothA2dpSink实现了BluetoothProfile {..." 我该如何使用它的方法? 任何帮助将不胜感激。

2 个答案:

答案 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());
    }
}