as

Settings
Sign out
Notifications
Alexa
Amazonアプリストア
AWS
ドキュメント
Support
Contact Us
My Cases
開発
テスト
公開
収益化
ユーザーエンゲージメント
デバイスの仕様
リソース

Fireタブレットデバイスの識別

Fireタブレットデバイスの識別

Androidアプリを開発する際は、アプリが実行されるデバイス(Fireタブレットを含む)ごとに画面サイズやハードウェアの機能、ソフトウェアの実装などが異なることに注意してください。できる限り多くのデバイスでアプリが動作するよう、デバイスのハードウェアやソフトウェアの機能を調べ、提供されている機能に対応させることが大切です。

「Fireタブレット」など、特定のデバイスモデルの検出は避けます。デバイスの検出は、機能の検出よりも柔軟性に欠け、デバイスのモデルが増えるにつれて開発工数が増加してしまいます。

機能の検出は、PackageManagerを利用したり、リフレクションを実行したり、コンビニエントメソッドの結果を確認したりなど、複数の方法で行えます。たとえば、カメラインテントが利用可能かどうかを確認する場合、PackageManagerを使用すれば、デバイスにカメラソフトウェアがインストールされているかどうかがわかります。

 /**
 *現在のデバイスが画像キャプチャアクションを処理できるかどうかを判定します。
 * 処理できる場合はtrue、処理できない場合はfalseを返します。
 */
protected boolean canHandleCameraIntent() {
  final Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
  final List<ResolveInfo> results = getPackageManager().queryIntentActivities(intent, 0);
  return (results.size() > 0);
}

Fireタブレットの機能

ビルドモデル、APIレベル、Fire OSのバージョンなど、Fireタブレットの一般的な機能を次の表に示します。この情報は、Fireタブレットのデバイス仕様でも確認できます。

Fireタブレット ビルドモデル AndroidのバージョンとAPIレベル 最新のFire OSバージョン
Fire HD 8(2024、第12世代) KFRAPWI(3GB)、KFRASWI(4GB) Android 11、APIレベル30 Fire OS 8
Fire HD 10(2023、第13世代) KFTUWI Android 11、APIレベル30 Fire OS 8
Fire Max 11(2023、第13世代) KFSNWI Android 11、APIレベル30 Fire OS 8
Fire HD 8(2022、第12世代) KFRAWI(2GB)、KFRAPWI(3GB) Android 11、APIレベル30 Fire OS 8
Fire 7(2022、第12世代) KFQUWI Android 11、APIレベル30 Fire OS 8
Fire HD 10(2021、第11世代) KFTRWI(3GB)、KFTRPWI(4GB) Android 9、APIレベル28 Fire OS 7
Fire HD 8(2020、第10世代) KFONWI Android 9、APIレベル28 Fire OS 7
Fire HD 10(2019、第9世代) KFMAWI Android 9、APIレベル28 Fire OS 7
Fire 7(2019、第9世代) KFMUWI Android 9、APIレベル28 Fire OS 7
Fire HD 8(2018、第8世代) KFKAWI Android 9、APIレベル28 Fire OS 7
Fire HD 10(2017、第7世代) KFSUWI Android 5.1、APIレベル22 Fire OS 5
Fire HD 8(2017、第7世代) KFDOWI Android 5.1、APIレベル22 Fire OS 5
Fire 7(2017、第7世代) KFAUWI Android 5.1、APIレベル22 Fire OS 5
Fire HD 8(2016、第6世代) KFGIWI Android 5.1、APIレベル22 Fire OS 5
Fire HD 10(2015、第5世代) KFTBWI Android 5.1、APIレベル22 Fire OS 5
Fire HD 8(2015、第5世代) KFMEWI Android 5.1、APIレベル22 Fire OS 5
Fire(2015、第5世代) KFFOWI Android 5.1、APIレベル22 Fire OS 5
Fire HDX 8.9(2014、第4世代) KFSAWA(WAN)、KFSAWI(Wi-Fi) Android 5.1、APIレベル22 Fire OS 5
Fire HD 7(2014、第4世代) KFASWI Android 5.1、APIレベル22 Fire OS 5
Fire HD 6(2014、第4世代) KFARWI Android 5.1、APIレベル22 Fire OS 5
Kindle Fire HDX 7(2013、第3世代) KFTHWA(WAN)KFTHWI(Wi-Fi) Android 4.4.2、APIレベル19 Fire OS 4
Kindle Fire HDX 8.9(2013、第3世代) KFAPWA(WAN)KFAPWI(Wi-Fi) Android 4.4.2、APIレベル19 Fire OS 4
Kindle Fire HD 7(2013、第3世代) KFSOWI Android 4.4.2、APIレベル19 Fire OS 4
Kindle Fire(2012、第2世代) KFOT Android 4.0.3、APIレベル15 Fire OS 3
Kindle Fire HD 7(2012、第2世代) KFTT Android 4.0.3、APIレベル15 Fire OS 3
Kindle Fire HD 8.9(2012、第2世代) KFJWA(WAN)KFJWI(Wi-Fi) Android 4.0.3、APIレベル15 Fire OS 3
Kindle Fire(2011、第1世代) Kindle Fire Android 2.3.3、APIレベル10 Fire OS 2

そのほかのサポート対象のテクノロジー

Fireタブレットは以下のテクノロジーをサポートしています。

  • テキスト読み上げ機能:IVONA Text-to-Speech(TTS)エンジンを搭載するFireタブレットは、AndroidのTextToSpeech APIに対応しています。詳細については、Androidドキュメントに記載のTextToSpeech(英語のみ)を参照してください。現在、以下の言語がTTSエンジンによってサポートされています。
    • 米国英語
    • フランス語(ダウンロード可)
    • イタリア語(ダウンロード可)
    • ドイツ語(ダウンロード可)
    • スペイン語(ダウンロード可)
    • カナダフランス語(ダウンロード可)
    • オーストラリア英語(ダウンロード可)
    • 英国英語(ダウンロード可)
    • ブラジルポルトガル語(ダウンロード可)
    • ロシア語(ダウンロード可)
  • ウェブアプリ:Fireタブレットでは、Chromiumベースの最適化されたウェブランタイムを介して、ウェブアプリがサポートされています。ウェブアプリの開発と公開に関しては、ウェブアプリの開発についてを参照してください。
  • Eメール:Fireタブレットには、mailto:リンクとEメールインテントに応答するEメールクライアントがプリインストールされています。
  • SDカード:一部のFireタブレットには外部ストレージがありません。アプリのデータがSDカードに保存される場合、Fireタブレット対応アプリに変更を加える必要はありません。付属SDカードが取り外しできない内部ストレージだけのタブレットの場合は、getExternalStorageDirectory()を使用してそのSDカードにデータを書き込むことができます。
  • オーディオ形式:Fireタブレットでは、次のオーディオ形式がネイティブにサポートされています。 AC-3、E-AC3、AAC LC/LTP、HE-AACv1(AAC+)、HE-AACv2(enhanced AAC+)、AMR-NB、MP3、MIDI、Ogg Vorbis、PCM/WAVE。
  • ドルビーオーディオAPI:Kindle Fire HDXタブレットとKindle Fire HDタブレットでは、音声処理エンジンを使用するAPIがドルビーによって提供されています。ドルビーの開発者向けウェブサイト(英語のみ)では、ドルビープラグインをダウンロードしたり、開発者向けサービスについて詳しく知ることができます。
").insertBefore(this); } }); }); $(document).ready(function() { if ($("#jumpoffset").length) { var scrollhash = document.getElementById('jumpoffset'); scrollhash.scrollIntoView(true); if (location.hash) { location.href = location.hash; } else { var scrollbody = document.querySelector('.mainColumn'); scrollbody.scrollIntoView(true); window.scroll(0, -500); } } }); $(document).ready(function() { if ($("#jump").length) { var scrollold = document.getElementById('jump'); scrollold.scrollIntoView(true); window.scroll(0, -100); if (location.hash) { location.href = location.hash; } } }); //resize container on local builds $(document).ready(function() { if (window.location.href.indexOf("/127.0.0.1:4000/") > -1) { document.querySelector('.container-fluid').style.position = 'fixed'; } }); //add underline to headers $(document).ready(function() { if ($(".productTitle").is(':contains("Alexa Skills Kit")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Skills Kit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("Alexa Presentation Language (APL)")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Skills Kit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("Alexa Connect Kit")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Connect Kit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("A/B Testing")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Skills Kit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("Alexa Smart Properties")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Smart Properties")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("Alexa Conversations Developer Guide")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Skills Kit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($(".productTitle").is(':contains("Alexa Design Guide")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Design Guide")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Design Guide")')) { $(this).css("padding", "0"); } }); } if ($(".productTitle").is(':contains("Alexa Gadgets Toolkit")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Gadgets Toolkit")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Gadgets Toolkit")')) { $(this).css("padding", "0"); } }); } if ($(".productTitle").is(':contains("Alexa Voice Service")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Alexa Voice Service")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($("h1").is(':contains("Alexa Reference Content")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Reference")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($("h1").is(':contains("Alexa Videos")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Videos")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($("h1").is(':contains("Alexa Code Samples")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Code Samples")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } if ($("h1").is(':contains("Documentation Home")')) { $(".dppnItem a").each(function() { if ($(this).is(':contains("Home")')) { $(this).css("border-bottom", "1.3px solid #FFFFFF"); } }); } }); $(document).ready(function () { const myScrollspy = $("#myScrollspy"); if (myScrollspy.length) { const containsList2orList3 = myScrollspy.find(".list2, .list3").length > 0; if (containsList2orList3) { myScrollspy.css("display", "block"); $(".fa.fa-info-circle").show(); } else { myScrollspy.css("display", "none"); $(".fa.fa-info-circle").hide(); } } }); /** * This function moves the 'page-not-translated' section from its original position * to a new position after the 'atd-categories-header' and ensures it is displayed * only in the new location. This is achieved by hiding the section initially, * moving it, and then displaying it again once it is in the correct position. */ $(document).ready(function() { const $pageNotTranslatedMessage = $('#page-not-translated'); const $desktopCategoriesHeader = $('.navigation-header.atd-categories-header'); const $mobileToggleHeader = $('.mobile-toggle'); if ($pageNotTranslatedMessage.length) { if ($mobileToggleHeader.length) { $pageNotTranslatedMessage.insertAfter($mobileToggleHeader); } else if ($desktopCategoriesHeader.length) { $pageNotTranslatedMessage.insertAfter($desktopCategoriesHeader); } $pageNotTranslatedMessage.show(); } }); // Function to handle smooth scrolling to target elements when links are clicked $(document).ready(function () { $('.customspy a, .mainColumn a').on('click', function (event) { const targetId = $(this).attr('href'); if (targetId && targetId.startsWith('#')) { event.preventDefault(); const targetElement = document.querySelector(`[id="${targetId.replace('#', '')}"]`); if (targetElement) { const hash = targetId.substring(1); window.history.pushState(null, '', `#${hash}`); targetElement.scrollIntoView(true); window.scroll(0, -500); } } }); }); window.addEventListener('DOMContentLoaded', function () { const targetId = window.location.hash; if (targetId) { const targetElement = document.querySelector(targetId); if (targetElement) { setTimeout(() => { targetElement.scrollIntoView(true); window.scrollBy(0, -500); }, 10); } } }); function activateContentBasedOnHash() { const currentHash = window.location.hash.substring(1); if (currentHash) { const contentElement = document.getElementById(currentHash); if (contentElement) { activateTabAndContent(contentElement); } } } function activateTabAndContent(contentElement) { const tabSection = contentElement.closest('.tab-pane'); if (tabSection) { const parentTabLink = document.querySelector(`a[href='#${tabSection.id}']`); if (parentTabLink) { const parentNavTabs = parentTabLink.closest('.nav-tabs'); if (parentNavTabs) { parentNavTabs.querySelectorAll('.nav-link').forEach(link => { link.classList.remove('active', 'show'); }); parentTabLink.classList.add('active', 'show'); } const parentTabContent = tabSection.closest('.tab-content'); if (parentTabContent) { parentTabContent.querySelectorAll('.tab-pane').forEach(tab => { tab.classList.remove('active', 'show'); }); tabSection.classList.add('active', 'show'); } } } } function scrollToHashWithOffset() { const tabHash = window.location.hash; const targetTabLink = document.querySelector(`.nav-tabs a[href="${tabHash}"]`); const mainContentColumn = document.querySelector('.inline'); if (targetTabLink && mainContentColumn) { const totalHeaderHeight = getTotalHeaderHeight() + 40; targetTabLink.scrollIntoView({behavior: 'smooth', block: 'start'}); setTimeout(() => { mainContentColumn.scrollBy(0, -totalHeaderHeight); }, 20); } } function getTotalHeaderHeight() { return [...document.querySelectorAll('.atd-services-header, .atd-categories-header')] .reduce((total, header) => total + (header ? header.offsetHeight : 0), 0); } function handleClick(event) { event.preventDefault(); const link = event.currentTarget; const hash = link.getAttribute('href').substring(1); const contentElement = document.getElementById(hash); if (contentElement) { activateTabAndContent(contentElement); scrollToHashWithOffset(); } } function handleBackToTopClick(event) { event.preventDefault(); const mainContentColumn = document.querySelector('.inline'); if (mainContentColumn) { mainContentColumn.scrollTo({top: 0, behavior: 'smooth'}); } window.scrollTo({top: 0, behavior: 'smooth'}); } document.addEventListener('DOMContentLoaded', () => { activateContentBasedOnHash(); scrollToHashWithOffset(); const myScrollspy = document.getElementById('myScrollspy'); if (myScrollspy) { myScrollspy.querySelectorAll('a[href^="#"]').forEach(link => { link.addEventListener('click', handleClick); }); } document.querySelectorAll('.dpfBackToTopLink, .backToTop').forEach(link => { link.addEventListener('click', handleBackToTopClick); }); }); // Show tab link as selected when clicked $(document).ready(function() { $('.nav-tabs > li > a').on('click', function(e) { e.preventDefault(); $(this).tab('show'); $(this).addClass('active show'); }); }); // Fix for when version dropdown is on the same page as nav tab dropdown // closes other dropdown menu to avoid overlap/usability issues $(document).ready(function() { // Version selector dropdown $('.versionsButton').click(function(e) { // Close the nav tab dropdown if open $('.nav-link.dropdown-toggle').siblings('.dropdown-menu').removeClass('show'); }); // Nav tab selector dropdown $('.nav-link.dropdown-toggle').click(function(e) { // Close the version dropdown if open $('.versionsButton').siblings('.dropdown-menu').removeClass('show'); }); }); // Handle active state management for dropdown menu in nav-tabs // Fixes edge case issues for when version selector dropdown and // nav-tab dropdown appear on the same page $(document).ready(function() { // Function to deactivate all tab panes and reset dropdown items function deactivateAllTabs() { $('.position .nav-item.dropdown .dropdown-menu .dropdown-item').each(function() { const targetId = $(this).attr('href'); $(targetId).removeClass('active show'); $(this).removeClass('active show'); }); } // Store the original pushState function const originalPushState = history.pushState; // Create a custom event for pushState const pushStateEvent = new Event('pushState'); // Override pushState history.pushState = function() { originalPushState.apply(this, arguments); // Dispatch the custom event window.dispatchEvent(pushStateEvent); }; // Add pushState listener window.addEventListener('pushState', function() { const params = new URLSearchParams(window.location.search); const vValue = params.get('v'); // Handle query parameter change from version selector if (vValue) { // Remove active classes from all tabs deactivateAllTabs(); $('.position').each(function() { var firstTabPane = $(this).find('.tab-pane').first(); if (firstTabPane.length > 0) { var tabId = firstTabPane.attr('id'); var dropdownItem = $('.dropdown-menu .dropdown-item[href="#' + tabId + '"]'); // Make first tab in each version active dropdownItem.addClass('active show'); firstTabPane.addClass('active show'); } }); } }); // Handle dropdown item clicks $('.position .nav-item.dropdown .dropdown-menu .dropdown-item').click(function(e) { e.preventDefault(); // Remove active classes from all tabs deactivateAllTabs(); // Add active class to clicked item $(this).addClass('active show'); // Show corresponding tab content const targetId = $(this).attr('href'); $(targetId).addClass('active show'); }); // Handle initial load from URL hash if (window.location.hash) { const tabId = window.location.hash; if ($(tabId).length) { // Deactivate all tabs first deactivateAllTabs(); // Activate the correct tab and content $(`.position .nav-item.dropdown .dropdown-menu .dropdown-item[href="${tabId}"]`).addClass('active show'); $(tabId).addClass('active show'); } } }); // Fix issue when anchor linking into a tab with a dropdown menu $(document).ready(function() { // Handle initial load from URL hash if (window.location.hash) { const tabId = window.location.hash; if ($(tabId).length) { // Deactivate active links in dropdown $('.nav-item.dropdown .dropdown-menu .dropdown-item').each(function() { $(this).removeClass('active show'); }); } } });