Software Mirror Screen from Android to TV

My Samsung device running KitKat (19) has the Mirror Image option, which finds and synchronizes with neighboring compatible displays. I would like to implement this feature programmatically.

I experimented with both the MediaRoute classes and the DisplayManager. Both successfully detect neighboring displays, but only AFTER I manually turn on screen shielding. I would like them to automatically detect displays. Is there something I’m missing to start scanning or letting the WifiDisplayController transmit?

Here is my implementation of MediaRouter:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    handler = new Handler();
    output = (TextView) findViewById(R.id.output);
    mMediaRouter = MediaRouter.getInstance(this);
    mSelector = new MediaRouteSelector.Builder()
          .addControlCategory(MediaControlIntent.CATEGORY_LIVE_VIDEO)
          .addControlCategory(MediaControlIntent.CATEGORY_REMOTE_PLAYBACK)
          .build();
}

@Override
public void onResume() {
    super.onResume();
    mMediaRouter.addCallback(mSelector, mMRCallback,
            MediaRouter.CALLBACK_FLAG_PERFORM_ACTIVE_SCAN);
}

@Override
public void onPause() {
    super.onPause();
    mMediaRouter.removeCallback(mMRCallback);
}

protected void onDestroy() {
    super.onDestroy();
}

private MediaRouter.Callback mMRCallback = new MediaRouter.Callback() {

    @Override
    public void onRouteAdded(MediaRouter router, MediaRouter.RouteInfo route) {
        super.onRouteAdded(router, route);
        String outputText = router.getRoutes().size() + " Routes Detected\n";
        List routes = router.getRoutes();
        for (int i=0;i<routes.size(); i++) {
            outputText = outputText + routes.get(i) + "\n";
        }
        output.setText(outputText);
    }

    @Override
    public void onRouteRemoved(MediaRouter router, MediaRouter.RouteInfo route) {
        super.onRouteRemoved(router, route);
        output.setText("Route Removed: " + route + "\n"
                + router.getRoutes().size() + " routes detected.");
    }

    @Override
    public void onProviderAdded(MediaRouter router, MediaRouter.ProviderInfo provider) {
        super.onProviderAdded(router, provider);
        String outputText = router.getProviders().size() + " Providers Detected\n";
        List providers = router.getProviders();
        for (int i=0;i<providers.size(); i++) {
            outputText = outputText + providers.get(i) + "\n";
        }
        output.setText(outputText);
    }

    @Override
    public void onProviderRemoved(MediaRouter router, MediaRouter.ProviderInfo provider) {
        super.onProviderRemoved(router, provider);
        output.setText("Provider removed: " + provider + "\n"
                + router.getProviders().size() + " providers detected.");
    }

    @Override
    public void onProviderChanged(MediaRouter router, MediaRouter.ProviderInfo provider) {
        super.onProviderChanged(router, provider);
    }
};

And here is my implementation of DisplayManager:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    handler = new Handler();
    displayManager = (DisplayManager) 

getSystemService (DISPLAY_SERVICE); }

@Override
public void onResume() {
    super.onResume();
    displayManager.registerDisplayListener(displayListener,handler);
    displayManager.getDisplays();
}

@Override
public void onPause() {
    super.onPause();
    displayManager.unregisterDisplayListener(displayListener);
}

private DisplayManager.DisplayListener displayListener = new DisplayManager.DisplayListener() {
    @Override
    public void onDisplayAdded(int displayId) {
        output.setText("Display added: " + displayId);
    }

    @Override
    public void onDisplayRemoved(int displayId) {
        output.setText("Display removed: " + displayId);

    }

    @Override
    public void onDisplayChanged(int displayId) {

    }
};
+4
1

, , , .

public void enablingWiFiDisplay() {
    try {
        startActivity(new Intent("android.settings.WIFI_DISPLAY_SETTINGS"));
        return;
    } catch (ActivityNotFoundException activitynotfoundexception) {
        activitynotfoundexception.printStackTrace();
    }

    try {
        startActivity(new Intent("android.settings.CAST_SETTINGS"));
        return;
    } catch (Exception exception1) {
        Toast.makeText(getApplicationContext(), "Device not supported", Toast.LENGTH_LONG).show();
    }
}
+2

All Articles