5

我去了三星网站并下载了媒体控制 SDK 包。当我在 Galaxy S3 Android 4.3 上使用 AllShare Cast 视频播放器时,我的智能电视(在同一网络中)出现在 AllShare Cast 列表中。

然而,

当我在根深蒂固的 Galaxy Note 2 Android 4.1.1 上使用相同的应用程序时,我的智能电视(在同一网络中)没有出现在 AllShare Cast 列表中。

代码:

public class DevicePicker extends Fragment implements OnClickListener,SmcDeviceFinder.StatusListener, SmcDeviceFinder.DeviceListener {


    public interface DevicePickerResult {

        void onDeviceSelected(SmcDevice device);

        /**
         * User clicked to disable AllShare
         */
        void onAllShareDisabled();
    }

    /**
     * The type of device we are interested in
     */
    private int mType = SmcDevice.TYPE_AVPLAYER;

    /**
     * Listener to be notified of events
     */
    private DevicePickerResult mPickerListener;

    /**
     * Device finder instance
     */
    private SmcDeviceFinder smcDeviceFinder;

    /**
     * The ImageView displaying AllShare icon
     */
    private ImageView mIcon;

    /**
     * Flag indicating if AllShare is currently active
     */
    private boolean mActive;

    private String mDeviceId;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        // Set view, remember ImageView for icon and setup onclick listener.
        View v = inflater.inflate(R.layout.device_picker, container, false);
        mIcon = (ImageView) v.findViewById(R.id.devicePickerIcon);
        mIcon.setOnClickListener(this);
        return v;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        /*
        if(savedInstanceState!=null){
            mDeviceId = savedInstanceState.getString("deviceId");
        }
        */
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

    }

    public void setDeviceType(int type) {
        mType = type;
    }

    public void setDeviceSelectedListener(DevicePickerResult listener) {
        mPickerListener = listener;
        restoreDevice();
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);

        // The service provider needs to be created after device type is set
        // It could also be created in onStart or onResume, but we the sooner
        // we create it, the sooner we get devices.
        SmcDeviceFinder df = new SmcDeviceFinder(getActivity());
        df.setStatusListener(this);
        df.start();

    }


    private void restoreDevice(){
        if(smcDeviceFinder != null && mDeviceId!=null && mPickerListener != null) {
            SmcDevice SmcDevice_ = smcDeviceFinder.getDevice(mType, mDeviceId);
            if(SmcDevice_!=null){
                mPickerListener.onDeviceSelected(SmcDevice_);
                setActive(true);
            }
        }
    }

    public void setActive(boolean newState) {
        if (newState == mActive) {
            // No change in state, do nothing
            return;
        }
        mActive = newState;
        mIcon.setImageResource(
                newState ?
                        R.drawable.allshare_icons_active :
                        R.drawable.allshare_icons_inactive);
        updateButtonCounter();
    }

    @Override
    public void onClick(View v) {
        if (v != mIcon) {
            return;
        }

        if(smcDeviceFinder != null) {

            int numDevices = smcDeviceFinder.getDeviceList(mType).size();

            // If no devices found, try refreshing the list.
            if (numDevices == 0) {
                smcDeviceFinder.rescan();
            }

            // If we are already active, disable allshare
            if (mActive) {
                setActive(false);
                if (mPickerListener != null) {
                    mPickerListener.onAllShareDisabled();
                }
                return;
            }
        }

        // Devices are available, and we are not connected
        // Ask user to select device
        showPickerDialog();
    }

    @Override
    public void onDetach() {
        if (smcDeviceFinder != null) {
            smcDeviceFinder.stop();
            smcDeviceFinder = null;
        }
        super.onDetach();
    }

    ///////////////////////////////////////////////////////////////////////////
    // These methods handle device finder start hide event.
    ///////////////////////////////////////////////////////////////////////////

    @Override
    public void onStarted(SmcDeviceFinder deviceFinder, int error) {
        if (error == Smc.SUCCESS) {
            smcDeviceFinder = deviceFinder;
            smcDeviceFinder.setDeviceListener(mType, this);
            smcDeviceFinder.rescan();
            updateButtonCounter();
            restoreDevice();
        }
    }

    @Override
    public void onStopped(SmcDeviceFinder deviceFinder) {
        if (smcDeviceFinder == deviceFinder) {
            smcDeviceFinder.setDeviceListener(mType, null);
            smcDeviceFinder.setStatusListener(null);
            smcDeviceFinder = null;
        }
    }

    ///////////////////////////////////////////////////////////////////////////
    // These methods handle devices appearing and disappearing in network.
    ///////////////////////////////////////////////////////////////////////////

    @Override
    public void onDeviceAdded(SmcDeviceFinder deviceFinder, SmcDevice smcDevice) {
        // We aren't interested in individual devices, only in their number
        updateButtonCounter();
    }

    @Override
    public void onDeviceRemoved(SmcDeviceFinder deviceFinder, SmcDevice smcDevice, int error) {
        // We aren't interested in individual devices, only in their number
        updateButtonCounter();
        //if current device has been removed
        if (smcDevice.getId().equals(mDeviceId)) {
            setActive(false);
            if (mPickerListener != null) {
                mPickerListener.onAllShareDisabled();
            }
        }
    }



    /**
     * Methods that selects which icon to display, based on number of
     * available devices in network.
     */
    private void updateButtonCounter() {
        if (smcDeviceFinder != null) {
            int numDevices =
                smcDeviceFinder.getDeviceList(mType).size();

            mIcon.getDrawable().setLevel(numDevices);
            if (numDevices==0) {
                setActive(false);
            }
        }
    }

    public void showPickerDialog() {
        Intent intent = new Intent(getActivity(), DeviceSelectActivity.class);
        intent.putExtra("deviceType", mType);
        startActivityForResult(intent, 0);
    }

    /**
     * Callback when user has selected device in device select activity.
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            mDeviceId = data.getStringExtra("deviceId");
            int type = data.getIntExtra("deviceType", -1);

            if (smcDeviceFinder != null && mPickerListener != null) {
                SmcDevice device = smcDeviceFinder.getDevice(type, mDeviceId);
                if(device!=null){
                    mPickerListener.onDeviceSelected(device);
                    setActive(true);
                }
            }
        }
    }
}

wifi被打开了。

有人可以帮帮我吗?

有些应用程序甚至可以看到我的 Apple TV 设备(我的应用程序甚至无法在 AllShare Cast 列表中看到此 Apple TV 设备)

非常感谢。

4

1 回答 1

0

如果我没记错的话,AllShare 演员表是建立在 Miracast 之上的。该功能包含在具有必要硬件支持的设备的 Android 4.2 中,这可以解释为什么运行 4.1.1 的 Note 2 会出现问题。

于 2015-08-21T22:00:27.353 回答