var N = 5;
var ar_duo1 = Math.floor(Math.random()*N+1);
if (typeof adriver == 'undefined')
{
var adb1 = 'yes';
}
var user_type = "guest";
var page_type = "publish_corp";
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-726094-1', 'auto');
ga('create', 'UA-726094-24', 'auto', {'name': 'HGM'});
ga('require', 'displayfeatures');
ga('set', 'dimension1', user_type); // user type - guest/readonly/habrauser
ga('set', 'dimension4', adb1);
ga('set', 'dimension5', page_type);
if(typeof removeUtms === 'undefined') {
removeUtms = function(){};
}
ga('HGM.set', 'dimension1', user_type);
ga('HGM.set', 'dimension2', "habrahabr");
ga('HGM.send', 'pageview');
ga('send', 'pageview', { 'hitCallback': removeUtms });
var adcm_config ={
id:1034,
platformId: 34,
tags: ['hub_wireless', 'hub_mobile_dev', 'hub_android_dev', 'hub_programming', 'g_internet_and_telecom', 'g_programming', 'g_mobile_os', 'g_android_os'],
init: function () {
window.adcm.call();
}
};
Device Lab от Google: Android TV
Что такое Android TV для пользователя? Это возможность превратить обычный телевизор в медиаплеер (с поддержкой как онлайн-каналов, так и привычных медиа приложений из Google Play) и игровую приставку (привычные игры из Google Play, но с новыми ощущениями и даже геймплеем). ATV-телевизоры в комплекте имеют либо обычный пульт, но с поддержкой функций, либо специальный отдельный пульт-геймпад. С пультом можно разговаривать (русский распознается), то есть использовать как источник голосового ввода для ATV. Можно также управлять системой через Android TV Remote Control, специальное приложение, которое можно скачать на смартфон или планшет.
В данном случае для участия в конкурсе разработчиков вы можете взять Forge TV, вариант Android TV от компании Razer. Довольно внушительное устройство - внутри приставки четырехъядерный Snapdragon 805 2.5 ГГц, Adreno 420 GPU, 2 Гб оперативной памяти, 16 Гб накопитель. Вовне - Ethernet, Wi-Fi, USB , HDMI и Bluetooth. К приставке вы можете подключить любой Bluetooth-джойстик, до четырех штук сразу, или, как минимум, вам понадобится пульт управления. Можно управлять основными функциями с клавиатуры, но это не очень удобно, а в играх она вообще не работает.
Google Play здесь имеет различные разделы. Обратите внимание, что есть TV Remote Games - это игры, где поддерживается управление пультом, а есть Casual for GamepadsAction for Gamepads - это игры с поддержкой джойстика.
Модели монетизации приложений стандартны: бесплатные, платные и со встроенными покупками. Привязывается стандартный Google Account, поэтому методы оплаты отдельно вводить не требуется - все подтягивается автоматически.
При установке приложений они скачиваются и устанавливаются локально, поэтому постоянное соединение с Интернетом не требуется - можно играть оффлайн.
Главное - система ввода и отображение информации. Ввод надо делать для джойстиков и пульта, помнить, что тачскрина у телевизора нет и не будет. А отображать так, чтобы пользователь с расстояния в три метра мог различать то, что вы ему показываете.
Ниже перечислю четыре основные действия, которые рекомендуется выполнить, чтобы разработать или адаптировать приложения для ATV, а также получить максимальную интеграцию с платформой.
<application>
...
<activity
android:name="com.example.android.TvActivity"
android:label="@string/app_name"
android:theme="@style/Theme.Leanback">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
</application>
$(document).ready(function(){
hljs.initHighlightingOnLoad();
});
.t264 .hljs {
background-color: ;
}
BrowseFragment - интерактивный список фрагментов контента в приложении:
UpdateRecommendationsService.java
public class UpdateRecommendationsService
extends IntentService {
@Override
protected void onHandleIntent(Intent intent) {
...
}
...
}
$(document).ready(function(){
hljs.initHighlightingOnLoad();
});
.t264 .hljs {
background-color: ;
}
https://developer.android.com/training/tv/index.html
Особенности создания игр для платформы:
https://developer.android.com/training/tv/games/index.html
Android TV Leanback Support Library - официальная UI-библиотека Google для создания телевизионных интерфейсов (впрочем, вы можете использовать и свой собственный):
https://github.com/googlesamples/androidtv-Leanback
Бесплатный курс на Udacity: https://www.udacity.com/course/android-tv-and-google-cast-development--ud875B
Видео "Ваши приложения на большом экране с помощью Android TV":
https://www.youtube.com/watch?v=yT4ADuZGEVY
1. Определите устройство для Android TV: определите, на каком устройстве была запущена ваша игра, используя метод UiModeManager.getCurrentModeType(). Если устройство запущено в режиме телевидения, вы можете указать, что показывать на запуске игры на самом Android TV (Configuration). Добавьте фильтр категорий LEANBACK_LAUNCHER в один из ваших интент-фильтров для определения того, что игра доступна на TV. Это нужно для того, чтобы игра попала в категорию приложений для TV в Google Play.
2. Touchscreen vs TV: у телевизора нет тач-скрина, поэтому убедитесь, что флагу «нужен тач-скрин» присвоено ложное значение, потому что по умолчанию на Android он имеет истинное значение. Так ваше приложение не вылетит из TV Play Store сразу после запуска. Кроме того, проверьте ваши разрешения, потому что в некоторых могут встретиться требования к ПО, которые нужно будет явно убрать.
3. Используйте Hardware API: используйте диспетчер пакетов с System Feature API, чтобы ваша игра знала, какие возможности она может и должна показать. Например, показывать ли пользователю элементы управления на тач-скрине или игровые контроллеры. Вы также можете сделать так, чтобы приложение знало о своей локации с использованием API местоположения из сервисов Google Play: автоматическое отслеживание местоположения, геозонирование и распознавание активности.
4. Используйте подходящие контроллеры: чтобы охватить больше пользователей, ваше приложение должно поддерживать упрощенную схему ввода, для которой не нужен D-Pad. Тем не менее игрок должен иметь возможность использовать его в любой момент в игре — не просто для управления геймплеем, но и для навигационных меню и рекламы, поэтому ваша игра на Android TV не должна никак ссылаться на тач-интерфейс. Например, в игре на Android TV не должно говориться: «Тапните сюда для продолжения».
5. Появитесь в нужном месте: убедитесь, что вы добавили атрибут android:isGame и сделали его истинным, чтобы игра появлялась в правильном ряде в лаунчере — игры.
6. Сделайте баннеры для домашнего экрана: нужны баннеры домашнего экрана для каждой локализации, особенно если вы международный разработчик. Баннер (320*180) — точка запуска игры, которая возникает на домашнем экране в ряде с играми.
7. Используйте изображение ТВ в вашем листинге в сторе: убедитесь, что у вас есть хотя бы один скрин ТВ на странице Store Listing. Здесь должна быть иконка в высоком разрешении, фичеринг графика, промо-графика и ТВ-баннер.
8. Улучшите видимость своего приложения через «поиск» и «рекомендации»: Android TV использует поисковой интерфейс Android для поиска контента из установленных приложений и игр и выдает результаты поиска пользователю. Реализуйте ContentProvider, чтобы показывать предположения пользователю и SearchManager для создания глубоких ссылок на контент игры.
9. Установите правильные цены и дистрибуцию: проверьте «Distribute to Android TV» в нужной секции в консоли разработчика. Тогда Google сделает ревью, чтобы убедиться, что ваша игра соответствует минимальным требованиям для TV.
10. Ведите пользователя: используйте туториал для обучения пользователя игровым механикам и упоминайте тот вид управления, который включен у пользователя.
— На данный момент приложение для Android TV – самое передовое среди всех наших приложений для Smart TV. Оно позволяет прямо с главного экрана продолжить в один клик просмотр с того места, где остановился пользователь (эта функция работает в том числе кроссплатформенно). Фильмы, отложенные в список «Смотреть позже» и покупки также доступны со всех устройств: сайта, мобильных приложений, приложений для Smart TV.
Мы решили использовать нашу собственную команду разработки, которая занимается основным приложением. Всегда интересно изучить новую платформу и новые библиотеки.
$(document).ready(function() {
t341_showCaptions('5997013');
t341_checkSize('5997013');
$("#t-carousel5997013 .t-carousel__slides").swipe( {
swipeLeft:function(event, direction, distance, duration) {
$(this).parent().carousel('next');
},
swipeRight: function(event, direction, distance, duration) {
$(this).parent().carousel('prev');
},
threshold: 50,
preventDefaultEvents: false,
allowPageScroll: "none"
});
});
$(window).resize(function() {
t341_checkSize('5997013');
});
— Довольно стандартные — Android Studio и Android Leanback Library для разработки; Sketch, Zeplin и Material Design для дизайна.
— С какими основными сложностями вы столкнулись?
— Каких-то больших трудностей не было, в основном это были проблемы совместимости одного приложения для двух платформ и вопросы разделения версий в Google Play. Из-за разнообразия устройств с Android TV, нам так же пришлось купить несколько телевизоров популярных брендов и несколько приставок, которые сейчас официально не продаются в России.
— Сколько сейчас у вас пользователей?
— С первого же дня мы вошли в Топ 10 самых популярных бесплатных приложений на Android TV в России. И до сих пор остаемся единственным онлайн-кинотеатром в этом топе. Мы не раскрываем цифры посещаемости, однако число просмотров на платформе исчисляется сотнями тысяч.
— Если использовать Android TV только в качестве Google Cast приемника, ничего дополнительно делать не надо. Но это не лучший вариант использования Android TV, так как для запуска Вашего приложения оно должно быть установлено на мобильном устройстве, на котором придется выбирать контент и управлять воспроизведением. Кроме того, пользователи не смогут найти ваше приложение в Google Play на Android TV.
Приложения, адаптированные для Android TV, используют другой подход к построению пользовательского интерфейса и навигации по приложению. Придется забыть про тачи и жесты, все управление только с пульта с навигационными кнопками - стрелками и кнопками ok и back.
Самый простой способ сделать приложение по всем правилам Android TV это использовать библиотеку Leanback из Android Support Library. Но для этого вам придется как минимум полностью переписать уровень представления, а скорее всего, придется переписать и модели данных.
В идеале вы можете использовать один общий код для бизнес-логики и работы с данными и два разных кода представления по одному для Android и Android TV.
Кроме того, для Android TV появилось несколько механизмов, которые стоит поддержать. Самое интересное и полезное, на наш взгляд, это отображение рекомендованного контента на главном экране ТВ. При этом отображается контент из всех приложений, установленных на Android TV, если они поддерживают такой механизм.
— Какие сложности тут есть?
— Самое непростое это переработать приложение для соответствия UI-гайдлайнам и принципам навигации Android TV. Грамотно выделить уровень представления, избежать дублирования кода и сохранить ядро приложения в единственном экземпляре как для Android, так и для Android TV.
— Как вы их решали?
— Очень помогает в этом плане механизм Data Binding, который мы стараемся использовать во всех новых разработках. Этот механизм позволяет отделить модели данных от их представления на разных платформах. Для данных мы используем Retrofit в связке с RxJava. Эти библиотеки позволяют быстро и эффективно разработать универсальное приложение для разных Android-платформ.
— Какими инструментами вы пользуетесь для разработки?
— Мы используем Android Studio в связке со стандартным набором: Gradle, Git, сейчас это основные инструменты для большинства Android разработчиков. Применяем для непрерывной интеграции TeamCity, Robolectric для автотестов и Jira в качестве багтрекера.
Рассматриваем Kotlin как перспективный язык, на котором гораздо удобнее работать с лямбда выражениями из RxJava.
Вариант 1
Как говорят, в первых версиях Android TV сделать снимок экрана было довольно затруднительно. Надо было подключать устройство к Android Studio и через режим отладки снимать скриншоты. Другим вариантом, который удалось найти, было использование Twitch. На самом деле в варианте Force TV, который вы будете использовать, снимок экрана делается проще простого: вы просто подключаете стандартную PC-клавиатуру к USB-порту приставки и в ней по умолчанию работает кнопка PrintScreen, которая сохраняет скриншоты в домашнюю директорию с картинками.
Добраться до них тоже довольно легко. В арсенале Google Play есть прекрасное приложение ES File Explorer, знакомое, думаю, большинству пользователей Android. Мало того, что оно дает полный доступ к файловой системе приставки, так оно еще может и работать как ftp-сервер на приставке. В результате из любого браузера на десктопе вы моментально получаете доступ к фалйам Forge TV, в том числе и скриншотам.
$(document).ready(function() {
t341_showCaptions('5997119');
t341_checkSize('5997119');
$("#t-carousel5997119 .t-carousel__slides").swipe( {
swipeLeft:function(event, direction, distance, duration) {
$(this).parent().carousel('next');
},
swipeRight: function(event, direction, distance, duration) {
$(this).parent().carousel('prev');
},
threshold: 50,
preventDefaultEvents: false,
allowPageScroll: "none"
});
});
$(window).resize(function() {
t341_checkSize('5997119');
});
1. В настройках включаем режим отладки (надо зайти в Settings - About Build - кликнуть до 10 раз на пункт Build - после этого включится режим разработчика - надо выйти на главный экран и вернуться в Settings - там в Preferences будет пункт Developer Options). Включаем также режим Device mode (это в Developer Options - Razer Tools).
2. Для подключения вам нужен будет USB 2.0 A-to-A кабель.
3. Устанавливаем Google ADB драйвера из SDK (скорее всего, они у вас уже есть).
4. Включаем ADB: запускаем утилиту для конфигурирования, например:C:Program FilesAndroidandroid-sdktools> android.bat update adbизменяем конфиг и добавляем вендора с id 0x1532
Example adb_usb.ini (normally located at C:Users\.androidadb_usb.ini) file…
# ANDROID 3RD PARTY USB VENDOR ID LIST -- DO NOT EDIT.
# USE 'android update adb' TO GENERATE.
# 1 USB VENDOR ID PER LINE.
0x1532
$(document).ready(function(){
hljs.initHighlightingOnLoad();
});
.t264 .hljs {
background-color: ;
}
А в следующей статье лаборатории - маячки с поддержкой Eddystone.
-
—
-
579
-
8
Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.
$(document).ready( function(){
window.tmidLogin = function(){ return false; };
if( $.cookie('tmid_no_check') === undefined ) {
var expire = new Date();
expire.setMinutes(expire.getMinutes() + 10 );
$.cookie('tmid_no_check', 1, { expires: expire } );
$.getScript("https://id.tmtm.ru/checklogin/", function(){
if( window.tmidLogin() ) {
var href = $('#login').attr('href');
if( href !== undefined ) {
window.location.href = href;
}
}
});
}
});
// global vars
var g_base_url = 'habrahabr.ru';
var g_show_xpanel = false;
var g_base_fullurl = 'https://habrahabr.ru/';
var g_is_guest = false;
(function (d, w, c) {
(w[c] = w[c] || []).push(function() {
try {
if (typeof (_yaparams) != 'undefined') {
w.yaCounter24049213 = new Ya.Metrika({id:24049213,
webvisor:true,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
params:_yaparams});
} else {
w.yaCounter24049213 = new Ya.Metrika({id:24049213,
webvisor:true,
clickmap:true,
trackLinks:true,
accurateTrackBounce:true});
}
} catch(e) { }
});
var n = d.getElementsByTagName("script")[0],
s = d.createElement("script"),
f = function () { n.parentNode.insertBefore(s, n); };
s.type = "text/javascript";
s.async = true;
s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js";
if (w.opera == "[object Opera]") {
d.addEventListener("DOMContentLoaded", f, false);
} else { f(); }
})(document, window, "yandex_metrika_callbacks");
function checkHeaderPos(){
var topToHubs = $('.megapost-cover').offset().top + $('.megapost-cover').outerHeight();
var sT = $(this).scrollTop();
if (sT > topToHubs) {
$('.t199__js__header, .t199_js__header').fadeIn();
} else {
$('.t199__js__header, .t199_js__header').fadeOut();
}
}
$(window).on('scroll', function() {
checkHeaderPos();
});
function drawguides(){
if($("#guides").length)$("#guides").remove();
$("body").append('
');
var g=$('#guides');
var ww=$(window).width();
var offset_left=parseInt((ww-1200)/2);
var col_space=20;
var col_width=100;
if(ww=960){
for(i=0;i<13;i++){
var x1=(i*col_width)+offset_left-col_space;
var x2=(i*col_width)+offset_left+col_space;
var n=i+1;
if(i!=0)g.append('
');
if(i!=12)g.append('
');
if(i!=12)g.append('
');
}
}
if(ww<960){
var x=parseInt(ww/2);
g.append('
');
}
var doit;
$(window).resize(function() {
if($("#guides").length){
clearTimeout(doit);
doit = setTimeout(drawguides, 300);
}
});
}
function showguides(){
if($("#guides").length){
$("#guides").remove();
$("#guidesmenubutton").css("display","none");
}else{
drawguides();
$("#guidesmenubutton").css("display","block");
}
}
Автор:
Комментарии (0)