androidtv.basetv module

Communicate with an Android TV or Amazon Fire TV device via ADB over a network.

ADB Debugging must be enabled.

class androidtv.basetv.BaseTV(host, adbkey='', adb_server_ip='', adb_server_port=5037)[source]

Bases: object

Base class for representing an Android TV / Fire TV device.

_adb_shell_pure_python_adb(cmd)[source]

Send an ADB command using an ADB server.

Parameters:cmd (str) – The ADB command to be sent
Returns:The response from the device, if there is a response
Return type:str, None
_adb_shell_python_adb(cmd)[source]

Send an ADB command using the Python ADB implementation.

Parameters:cmd (str) – The ADB command to be sent
Returns:The response from the device, if there is a response
Return type:str, None
static _audio_state(dumpsys_audio)[source]

Parse the audio_state property from the output of adb shell dumpsys audio.

Parameters:dumpsys_audio (str, None) – The output of adb shell dumpsys audio
Returns:The audio state, or None if it could not be determined
Return type:str, None
static _device(stream_music)[source]

Get the current playback device from the STREAM_MUSIC block from adb shell dumpsys audio.

Parameters:stream_music (str, None) – The STREAM_MUSIC block from adb shell dumpsys audio
Returns:The current playback device, or None if it could not be determined
Return type:str, None
_get_stream_music(dumpsys_audio=None)[source]

Get the STREAM_MUSIC block from adb shell dumpsys audio.

Parameters:dumpsys_audio (str, None) – The output of adb shell dumpsys audio
Returns:The STREAM_MUSIC block from adb shell dumpsys audio, or None if it could not be determined
Return type:str, None
static _is_volume_muted(stream_music)[source]

Determine whether or not the volume is muted from the STREAM_MUSIC block from adb shell dumpsys audio.

Parameters:stream_music (str, None) – The STREAM_MUSIC block from adb shell dumpsys audio
Returns:Whether or not the volume is muted, or None if it could not be determined
Return type:bool, None
_key(key)[source]

Send a key event to device.

Parameters:key (str, int) – The Key constant
static _media_session_state(media_session)[source]

Get the state from the output of adb shell dumpsys media_session | grep -m 1 'state=PlaybackState {'.

Parameters:media_session (str, None) – The output of adb shell dumpsys media_session | grep -m 1 'state=PlaybackState {'
Returns:The state from the output of the ADB shell command dumpsys media_session, or None if it could not be determined
Return type:int, None
static _running_apps(ps)[source]

Get the running apps from the output of ps | grep u0_a.

Parameters:ps (str, None) – The output of adb shell ps | grep u0_a
Returns:A list of the running apps, or None if it could not be determined
Return type:list, None
_volume(stream_music, device)[source]

Get the absolute volume level from the STREAM_MUSIC block from adb shell dumpsys audio.

Parameters:
  • stream_music (str, None) – The STREAM_MUSIC block from adb shell dumpsys audio
  • device (str, None) – The current playback device
Returns:

The absolute volume level, or None if it could not be determined

Return type:

int, None

_volume_level(volume)[source]

Get the relative volume level from the absolute volume level.

Parameters:volume (int, None) – The absolute volume level
Returns:The volume level (between 0 and 1), or None if it could not be determined
Return type:float, None
static _wake_lock_size(locks_size)[source]

Get the size of the current wake lock from the output of adb shell dumpsys power | grep Locks | grep 'size='.

Parameters:locks_size (str, None) – The output of adb shell dumpsys power | grep Locks | grep 'size='.
Returns:The size of the current wake lock, or None if it could not be determined
Return type:int, None
audio_state

Check if audio is playing, paused, or idle.

Returns:The audio state, as determined from the ADB shell command dumpsys audio, or None if it could not be determined
Return type:str, None
available

Check whether the ADB connection is intact.

Returns:Whether or not the ADB connection is intact
Return type:bool
awake

Check if the device is awake (screensaver is not running).

Returns:Whether or not the device is awake (screensaver is not running)
Return type:bool
back()[source]

Send back action.

connect(always_log_errors=True)[source]

Connect to an Android TV / Fire TV device.

Parameters:always_log_errors (bool) – If True, errors will always be logged; otherwise, errors will only be logged on the first failed reconnect attempt
Returns:Whether or not the connection was successfully established and the device is available
Return type:bool
current_app

Return the current app.

Returns:The ID of the current app, or None if it could not be determined
Return type:str, None
device

Get the current playback device.

Returns:The current playback device, or None if it could not be determined
Return type:str, None
down()[source]

Send down action.

enter()[source]

Send enter action.

get_device_properties()[source]

Return a dictionary of device properties.

Returns:props – A dictionary with keys 'wifimac', 'ethmac', 'serialno', 'manufacturer', 'model', and 'sw_version'
Return type:dict
home()[source]

Send home action.

is_volume_muted

Whether or not the volume is muted.

Returns:Whether or not the volume is muted, or None if it could not be determined
Return type:bool, None
key_0()[source]

Send 0 keypress.

key_1()[source]

Send 1 keypress.

key_2()[source]

Send 2 keypress.

key_3()[source]

Send 3 keypress.

key_4()[source]

Send 4 keypress.

key_5()[source]

Send 5 keypress.

key_6()[source]

Send 6 keypress.

key_7()[source]

Send 7 keypress.

key_8()[source]

Send 8 keypress.

key_9()[source]

Send 9 keypress.

key_a()[source]

Send a keypress.

key_b()[source]

Send b keypress.

key_c()[source]

Send c keypress.

key_d()[source]

Send d keypress.

key_e()[source]

Send e keypress.

key_f()[source]

Send f keypress.

key_g()[source]

Send g keypress.

key_h()[source]

Send h keypress.

key_i()[source]

Send i keypress.

key_j()[source]

Send j keypress.

key_k()[source]

Send k keypress.

key_l()[source]

Send l keypress.

key_m()[source]

Send m keypress.

key_n()[source]

Send n keypress.

key_o()[source]

Send o keypress.

key_p()[source]

Send p keypress.

key_q()[source]

Send q keypress.

key_r()[source]

Send r keypress.

key_s()[source]

Send s keypress.

key_t()[source]

Send t keypress.

key_u()[source]

Send u keypress.

key_v()[source]

Send v keypress.

key_w()[source]

Send w keypress.

key_x()[source]

Send x keypress.

key_y()[source]

Send y keypress.

key_z()[source]

Send z keypress.

left()[source]

Send left action.

media_next_track()[source]

Send media next action (results in fast-forward).

media_pause()[source]

Send media pause action.

media_play()[source]

Send media play action.

media_play_pause()[source]

Send media play/pause action.

media_previous_track()[source]

Send media previous action (results in rewind).

media_session_state

Get the state from the output of dumpsys media_session.

Returns:The state from the output of the ADB shell command dumpsys media_session, or None if it could not be determined
Return type:int, None
media_stop()[source]

Send media stop action.

menu()[source]

Send menu action.

mute_volume()[source]

Mute the volume.

power()[source]

Send power action.

right()[source]

Send right action.

running_apps

Return a list of running user applications.

Returns:A list of the running apps
Return type:list
screen_on

Check if the screen is on.

Returns:Whether or not the device is on
Return type:bool
set_volume_level(volume_level, current_volume_level=None)[source]

Set the volume to the desired level.

Note

This method works by sending volume up/down commands with a 1 second pause in between. Without this pause, the device will do a quick power cycle. This is the most robust solution I’ve found so far.

Parameters:
  • volume_level (float) – The new volume level (between 0 and 1)
  • current_volume_level (float, None) – The current volume level (between 0 and 1); if it is not provided, it will be determined
Returns:

The new volume level (between 0 and 1), or None if self.max_volume could not be determined

Return type:

float, None

sleep()[source]

Send sleep action.

space()[source]

Send space keypress.

up()[source]

Send up action.

volume

Get the absolute volume level.

Returns:The absolute volume level, or None if it could not be determined
Return type:int, None
volume_down(current_volume_level=None)[source]

Send volume down action.

Parameters:current_volume_level (float, None) – The current volume level (between 0 and 1); if it is not provided, it will be determined
Returns:The new volume level (between 0 and 1), or None if self.max_volume could not be determined
Return type:float, None
volume_level

Get the relative volume level.

Returns:The volume level (between 0 and 1), or None if it could not be determined
Return type:float, None
volume_up(current_volume_level=None)[source]

Send volume up action.

Parameters:current_volume_level (float, None) – The current volume level (between 0 and 1); if it is not provided, it will be determined
Returns:The new volume level (between 0 and 1), or None if self.max_volume could not be determined
Return type:float, None
wake_lock_size

Get the size of the current wake lock.

Returns:The size of the current wake lock, or None if it could not be determined
Return type:int, None