API های اندروید 3.1

سطح API: 12

برای توسعه دهندگان، پلتفرم Android 3.1 ( HONEYCOMB_MR1 ) به عنوان یک مؤلفه قابل دانلود برای Android SDK در دسترس است. پلتفرم قابل دانلود شامل کتابخانه اندروید و تصویر سیستم، و همچنین مجموعه ای از پوسته های شبیه ساز و موارد دیگر است. پلتفرم قابل دانلود شامل هیچ کتابخانه خارجی نیست.

برای توسعه دهندگان، پلتفرم Android 3.1 به عنوان یک جزء قابل دانلود برای Android SDK در دسترس است. پلتفرم قابل دانلود شامل کتابخانه اندروید و تصویر سیستم، و همچنین مجموعه ای از پوسته های شبیه ساز و موارد دیگر است. برای شروع توسعه یا آزمایش با Android 3.1، از Android SDK Manager برای دانلود پلتفرم در SDK خود استفاده کنید.

نمای کلی API

بخش‌های زیر یک نمای کلی فنی از چیزهای جدید برای توسعه‌دهندگان در Android 3.1، از جمله ویژگی‌های جدید و تغییرات در چارچوب API نسبت به نسخه قبلی ارائه می‌دهند.

رابط های برنامه کاربردی USB

Android 3.1 APIهای جدید قدرتمندی را برای ادغام تجهیزات جانبی متصل با برنامه های در حال اجرا بر روی پلتفرم معرفی می کند. APIها مبتنی بر پشته USB (گذرگاه سریال جهانی) و سرویس‌هایی هستند که در پلتفرم تعبیه شده‌اند، از جمله پشتیبانی از تعاملات میزبان USB و دستگاه. با استفاده از APIها، توسعه‌دهندگان می‌توانند برنامه‌هایی ایجاد کنند که قادر به کشف، برقراری ارتباط و مدیریت انواع دستگاه‌های متصل از طریق USB باشند.

پشته و API ها دو نوع اصلی سخت افزار USB را بر اساس اینکه دستگاه مجهز به Android به عنوان میزبان عمل می کند یا سخت افزار خارجی به عنوان میزبان، متمایز می شود:

  • یک دستگاه USB قطعه‌ای از سخت‌افزار متصل است که به دستگاه مجهز به Android برای خدمت به عنوان میزبان بستگی دارد. به عنوان مثال، اکثر دستگاه های ورودی، ماوس ها و جوی استیک ها، مانند بسیاری از دوربین ها، هاب ها و غیره، دستگاه های USB هستند.
  • لوازم جانبی USB قطعه‌ای از سخت‌افزار متصل است که دارای یک کنترل‌کننده میزبان USB است، برق را تامین می‌کند و برای ارتباط با دستگاه‌های مجهز به اندروید از طریق USB طراحی شده است، انواع لوازم جانبی می‌توانند به عنوان لوازم جانبی متصل شوند، از کنترل‌کننده‌های روباتیک گرفته تا تجهیزات موسیقی، دوچرخه‌های ورزشی. ، و بیشتر.

برای هر دو نوع - دستگاه‌های USB و لوازم جانبی USB - API‌های USB پلتفرم از کشف با پخش هدف در هنگام اتصال یا جدا شدن، و همچنین رابط‌های استاندارد، نقاط پایانی و حالت‌های انتقال (کنترل، حجیم و وقفه) پشتیبانی می‌کنند.

APIهای USB در بسته android.hardware.usb موجود هستند. کلاس مرکزی UsbManager است که روش های کمکی را برای شناسایی و برقراری ارتباط با دستگاه های USB و لوازم جانبی USB ارائه می دهد. برنامه‌ها می‌توانند نمونه‌ای از UsbManager را دریافت کنند و سپس لیست دستگاه‌ها یا لوازم جانبی پیوست شده را جستجو کنند و سپس با آنها ارتباط برقرار کنند یا آنها را مدیریت کنند. UsbManager همچنین اقدامات هدفی را که سیستم پخش می‌کند، اعلام می‌کند تا زمانی که یک دستگاه USB یا لوازم جانبی متصل یا جدا می‌شود، اعلام کند.

کلاس های دیگر عبارتند از:

  • UsbDevice ، کلاسی که نشان‌دهنده سخت‌افزار خارجی است که به‌عنوان یک دستگاه USB متصل شده است (با دستگاه مجهز به Android که به عنوان میزبان عمل می‌کند).
  • UsbAccessory ، نشان دهنده سخت افزار خارجی متصل به عنوان میزبان USB (با دستگاه مجهز به Android که به عنوان یک دستگاه USB عمل می کند).
  • UsbInterface و UsbEndpoint ، که دسترسی به رابط‌های USB استاندارد و نقاط پایانی دستگاه را فراهم می‌کنند.
  • UsbDeviceConnection و UsbRequest ، برای ارسال و دریافت داده ها و پیام های کنترلی به یا از یک دستگاه USB، به صورت همزمان و ناهمزمان.
  • UsbConstants ، که ثابت هایی را برای اعلام انواع نقطه پایانی، کلاس های دستگاه و غیره ارائه می کند.

توجه داشته باشید که اگرچه پشته USB در پلتفرم تعبیه شده است، پشتیبانی واقعی از حالت های میزبان USB و لوازم جانبی باز در دستگاه های خاص توسط سازنده آنها تعیین می شود. به طور خاص، حالت میزبان به سخت افزار کنترل کننده USB مناسب در دستگاه مجهز به اندروید متکی است.

علاوه بر این، توسعه دهندگان می توانند در Google Play درخواست فیلتر کنند، به طوری که برنامه های آنها برای کاربرانی که دستگاه هایشان پشتیبانی مناسب USB را ارائه نمی دهند، در دسترس نباشد. برای درخواست فیلتر کردن، در صورت لزوم، یک یا هر دو عنصر زیر را به مانیفست برنامه اضافه کنید:

  • اگر برنامه فقط باید برای دستگاه‌هایی قابل مشاهده باشد که از حالت میزبان USB (اتصال دستگاه‌های USB) پشتیبانی می‌کنند، این عنصر را اعلام کنید:

    <uses-feature android:name="android.hardware.usb.host" android:required="true">

  • اگر برنامه فقط باید برای دستگاه‌هایی قابل مشاهده باشد که از لوازم جانبی USB پشتیبانی می‌کنند (اتصال میزبان‌های USB)، این عنصر را اعلام کنید:

    <uses-feature android:name="android.hardware.usb.accessory" android:required="true">

برای اطلاعات کامل درباره نحوه توسعه برنامه‌هایی که با لوازم جانبی USB تعامل دارند، لطفاً به مستندات برنامه‌نویس مراجعه کنید.

برای مشاهده نمونه برنامه هایی که از API میزبان USB استفاده می کنند، به ADB Test and Missile Launcher مراجعه کنید

MTP/PTP API

Android 3.1 یک MTP API جدید را نشان می دهد که به برنامه ها اجازه می دهد مستقیماً با دوربین های متصل و سایر دستگاه های PTP تعامل داشته باشند. API جدید دریافت اعلان‌ها را هنگام اتصال و حذف دستگاه‌ها، مدیریت فایل‌ها و فضای ذخیره‌سازی در آن دستگاه‌ها و انتقال فایل‌ها و ابرداده‌ها به و از آن‌ها برای برنامه‌ها آسان می‌کند. MTP API زیر مجموعه PTP (Picture Transfer Protocol) مشخصات MTP (پروتکل انتقال رسانه) را پیاده سازی می کند.

MTP API در بسته android.mtp موجود است و این کلاس ها را ارائه می دهد:

  • MtpDevice یک دستگاه MTP را کپسوله می کند که از طریق گذرگاه میزبان USB متصل شده است. یک برنامه کاربردی می تواند یک شی از این نوع را نمونه سازی کند و سپس از روش های آن برای دریافت اطلاعات در مورد دستگاه و اشیاء ذخیره شده روی آن و همچنین باز کردن اتصال و انتقال داده استفاده کند. برخی از روش ها عبارتند از:
    • getObjectHandles() لیستی از دستگیره ها را برای تمام اشیاء روی دستگاه که با فرمت و والد مشخص شده مطابقت دارند، برمی گرداند. برای به دست آوردن اطلاعات در مورد یک شی، یک برنامه کاربردی می تواند یک دسته را به getObjectInfo() ارسال کند.
    • importFile() به برنامه اجازه می دهد تا داده های یک شی را در فایلی در حافظه خارجی کپی کند. این تماس ممکن است برای مدت زمان دلخواه بسته به اندازه داده ها و سرعت دستگاه ها مسدود شود، بنابراین باید از یک رشته spearate انجام شود.
    • open() به برنامه اجازه می دهد تا یک دستگاه MTP/PTP متصل را باز کند.
    • getThumbnail() تصویر کوچک شی را به صورت آرایه بایتی برمی گرداند.
  • MtpStorageInfo اطلاعات مربوط به یک واحد ذخیره سازی را در یک دستگاه MTP، مطابق با مجموعه داده StorageInfo که در بخش 5.2.2 از مشخصات MTP توضیح داده شده است، نگه می دارد. متدهای موجود در کلاس به برنامه اجازه می‌دهند رشته توضیحات واحد ذخیره‌سازی، فضای خالی، حداکثر ظرفیت ذخیره‌سازی، شناسه ذخیره‌سازی و شناسه حجم را دریافت کند.
  • MtpDeviceInfo اطلاعاتی در مورد یک دستگاه MTP مربوط به مجموعه داده DeviceInfo که در بخش 5.1.1 مشخصات MTP توضیح داده شده است را در خود نگه می دارد. روش‌های موجود در کلاس به برنامه‌ها اجازه می‌دهند سازنده، مدل، شماره سریال و نسخه دستگاه را دریافت کنند.
  • MtpObjectInfo اطلاعاتی در مورد یک شی ذخیره شده در یک دستگاه MTP، مطابق با مجموعه داده ObjectInfo که در بخش 5.3.1 مشخصات MTP توضیح داده شده است، نگه می دارد. متدهای موجود در کلاس به برنامه‌ها اجازه می‌دهند اندازه یک شی، فرمت داده، نوع ارتباط، تاریخ ایجاد و اطلاعات تصویر کوچک را دریافت کنند.
  • MtpConstants ثابت هایی را برای اعلام کدهای فرمت فایل MTP، نوع ارتباط و وضعیت حفاظت ارائه می دهد.

پشتیبانی از دستگاه های ورودی جدید و رویدادهای حرکتی

Android 3.1 زیرسیستم ورودی را برای پشتیبانی از دستگاه‌های ورودی جدید و انواع جدید رویدادهای حرکتی، در همه نماها و پنجره‌ها گسترش می‌دهد. توسعه‌دهندگان می‌توانند با استفاده از این قابلیت‌ها به کاربران اجازه دهند با استفاده از ماوس، توپ‌های حرکتی، جوی استیک، گیم‌پد و سایر دستگاه‌ها، علاوه بر صفحه‌کلید و صفحه‌نمایش لمسی، با برنامه‌هایشان تعامل داشته باشند.

این پلتفرم برای کنترل ورودی ماوس، اسکرول ویل و گوی تراک از دو اقدام رویداد حرکتی جدید پشتیبانی می کند:

  • ACTION_SCROLL ، که مکان نشانگر را توصیف می کند که در آن یک حرکت پیمایش غیر لمسی، مانند چرخ اسکرول ماوس، انجام می شود. در MotionEvent، مقدار محورهای AXIS_HSCROLL و AXIS_VSCROLL حرکت نسبی اسکرول را مشخص می کند.
  • ACTION_HOVER_MOVE ، موقعیت فعلی ماوس را هنگامی که هیچ دکمه ای فشار داده نمی شود، و همچنین هر نقطه میانی از آخرین رویداد HOVER_MOVE را گزارش می دهد. اعلان‌های ورود و خروج ماوس هنوز پشتیبانی نمی‌شوند.

برای پشتیبانی از جوی استیک و گیم پد، کلاس InputDevice شامل این منابع دستگاه ورودی جدید است:

برای توصیف رویدادهای حرکتی از این منابع جدید، و همچنین رویدادهای موش‌ها و گوی‌های ردیابی، پلتفرم اکنون کدهای محور را در MotionEvent تعریف می‌کند، مشابه نحوه تعریف کدهای کلیدی در KeyEvent . کدهای محور جدید برای جوی استیک ها و کنترلرهای بازی عبارتند از AXIS_HAT_X ، AXIS_HAT_Y ، AXIS_RTRIGGER ، AXIS_ORIENTATION ، AXIS_THROTTLE ، و بسیاری دیگر. محورهای MotionEvent موجود با AXIS_X ، AXIS_Y ، AXIS_PRESSURE ، AXIS_SIZE ، AXIS_TOUCH_MAJOR ، AXIS_TOUCH_MINOR ، AXIS_TOOL_MAJOR ، AXIS_TOOL_MINOR ، و AXIS_ORIENTATION نشان داده شده است.

علاوه بر این، MotionEvent تعدادی از کدهای محور عمومی را تعریف می‌کند که زمانی استفاده می‌شوند که چارچوب نمی‌داند چگونه یک محور خاص را نقشه‌برداری کند. دستگاه‌های خاص می‌توانند از کدهای محور عمومی برای ارسال داده‌های حرکتی سفارشی به برنامه‌ها استفاده کنند. برای فهرست کامل محورها و تفسیرهای مورد نظر آنها، به مستندات کلاس MotionEvent مراجعه کنید.

این پلتفرم رویدادهای حرکتی را برای برنامه‌ها به صورت دسته‌ای فراهم می‌کند، بنابراین یک رویداد واحد ممکن است دارای موقعیت فعلی و چندین حرکت به اصطلاح تاریخی باشد. برنامه ها باید از getHistorySize() برای بدست آوردن تعداد نمونه های تاریخی استفاده کنند، سپس تمام نمونه های تاریخی را به ترتیب با استفاده از getHistoricalAxisValue() بازیابی و پردازش کنند. پس از آن، برنامه ها باید نمونه فعلی را با استفاده از getAxisValue() پردازش کنند.

برخی از محورها را می‌توان با استفاده از روش‌های دسترسی ویژه بازیابی کرد. برای مثال، به‌جای فراخوانی getAxisValue() ، برنامه‌ها می‌توانند getX() را فراخوانی کنند. محورهایی که دارای لوازم جانبی داخلی هستند عبارتند از AXIS_X ، AXIS_Y ، AXIS_PRESSURE ، AXIS_SIZE ، AXIS_TOUCH_MAJOR ، AXIS_TOUCH_MINOR ، AXIS_TOOL_MAJOR ، AXIS_TOOL_MINOR ، و AXIS_ORIENTATION .

هر دستگاه ورودی دارای شناسه منحصربفرد و اختصاص یافته به سیستم است و همچنین ممکن است چندین منبع را ارائه دهد. هنگامی که یک دستگاه چندین منبع را ارائه می دهد، بیش از یک منبع می تواند داده های محور را با استفاده از همان محور ارائه دهد. به عنوان مثال، یک رویداد لمسی که از منبع لمسی می‌آید، از محور X برای داده‌های موقعیت صفحه استفاده می‌کند، در حالی که رویداد جوی استیک که از منبع جوی استیک می‌آید، به جای آن از محور X برای موقعیت چوب استفاده می‌کند. به همین دلیل، برای برنامه‌ها مهم است که مقادیر محورها را با توجه به منبعی که از آن منشا گرفته‌اند، تفسیر کنند. هنگام مدیریت یک رویداد حرکت، برنامه ها باید از روش هایی در کلاس InputDevice برای تعیین محورهای پشتیبانی شده توسط یک دستگاه یا منبع استفاده کنند. به طور خاص، برنامه‌ها می‌توانند از getMotionRanges() برای پرس و جو برای تمام محورهای یک دستگاه یا همه محورهای یک منبع معین از دستگاه استفاده کنند. در هر دو مورد، اطلاعات محدوده برای محورهای برگردانده شده در شی InputDevice.MotionRange منبع را برای هر مقدار محور مشخص می کند.

در نهایت، از آنجایی که رویدادهای حرکتی از جوی استیک‌ها، گیم‌پدها، موش‌ها و گوی‌های ردیابی رویدادهای لمسی نیستند، پلتفرم روشی جدید برای ارسال آنها به View به عنوان رویدادهای حرکتی «عمومی» اضافه می‌کند. به طور خاص، رویدادهای حرکت غیرلمسی را از طریق تماس با onGenericMotionEvent() به View s گزارش می دهد تا به onTouchEvent() .

این پلتفرم بسته به کلاس منبع رویداد، رویدادهای حرکت عمومی را به طور متفاوتی ارسال می کند. رویدادهای SOURCE_CLASS_POINTER به View زیر نشانگر می روند، مشابه نحوه عملکرد رویدادهای لمسی. همه بقیه به View متمرکز فعلی می روند. به عنوان مثال، این بدان معناست که یک View باید برای دریافت رویدادهای جوی استیک تمرکز کند. در صورت نیاز، برنامه‌ها می‌توانند این رویدادها را در سطح Activity یا Dialog با پیاده‌سازی onGenericMotionEvent() در آنجا مدیریت کنند.

برای مشاهده یک برنامه نمونه که از رویدادهای حرکت جوی استیک استفاده می کند، به GameControllerInput و GameView مراجعه کنید.

RTP API

Android 3.1 یک API را در پشته RTP (پروتکل حمل و نقل در زمان واقعی) داخلی خود قرار می دهد، که برنامه ها می توانند از آن برای مدیریت جریان داده بر اساس تقاضا یا تعاملی استفاده کنند. به طور خاص، برنامه‌هایی که VOIP، فشار به صحبت، کنفرانس و پخش صدا را ارائه می‌دهند، می‌توانند از API برای شروع جلسات و انتقال یا دریافت جریان‌های داده از طریق هر شبکه موجود استفاده کنند.

RTP API در بسته android.net.rtp موجود است. کلاس ها شامل:

  • RtpStream ، کلاس پایه جریان‌هایی است که بسته‌های شبکه را با بارهای رسانه از طریق RTP ارسال و دریافت می‌کنند.
  • AudioStream ، یک زیر کلاس از RtpStream که بارهای صوتی را از طریق RTP حمل می کند.
  • AudioGroup ، یک مرکز صوتی محلی برای مدیریت و ترکیب کردن بلندگو، میکروفون و AudioStream دستگاه.
  • AudioCodec که مجموعه ای از کدک هایی را که برای AudioStream تعریف می کنید را در خود جای می دهد.

برای پشتیبانی از کنفرانس صوتی و کاربردهای مشابه، یک برنامه کاربردی دو کلاس را به عنوان نقاط پایانی برای جریان نمونه‌سازی می‌کند:

  • AudioStream یک نقطه پایانی راه دور را مشخص می کند و شامل نقشه شبکه و یک AudioCodec پیکربندی شده است.
  • AudioGroup نقطه پایانی محلی را برای یک یا چند AudioStream نشان می دهد. AudioGroup همه AudioStream را با هم ترکیب می کند و به صورت اختیاری با بلندگوی دستگاه و میکروفون به طور همزمان تعامل دارد.

ساده ترین استفاده شامل یک نقطه پایانی راه دور و نقطه پایانی محلی است. برای استفاده های پیچیده تر، لطفاً به محدودیت های توضیح داده شده برای AudioGroup مراجعه کنید.

برای استفاده از RTP API، برنامه ها باید با اعلام <uses-permission android:name="android.permission.INTERNET"> در فایل های مانیفست خود، از کاربر اجازه درخواست کنند. برای دریافت میکروفون دستگاه، مجوز <uses-permission android:name="android.permission.RECORD_AUDIO"> نیز مورد نیاز است.

ویجت های برنامه قابل تغییر اندازه

با شروع اندروید 3.1، توسعه‌دهندگان می‌توانند ویجت‌های صفحه اصلی خود را قابل تغییر اندازه کنند - افقی، عمودی یا در هر دو محور. کاربران یک ویجت را لمس می‌کنند تا دسته‌های تغییر اندازه آن را نشان دهند، سپس دستگیره‌های افقی و/یا عمودی را برای تغییر اندازه روی شبکه طرح‌بندی بکشند.

توسعه دهندگان می توانند هر ویجت صفحه اصلی را با تعریف ویژگی resizeMode در فراداده AppWidgetProviderInfo ویجت قابل تغییر اندازه کنند. مقادیر برای ویژگی resizeMode شامل "افقی"، "عمودی" و "none" است. برای اعلام یک ویجت به عنوان قابل تغییر اندازه افقی و عمودی، مقدار "افقی|عمودی" را وارد کنید.

در اینجا یک مثال است:

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure"
    android:resizeMode="horizontal|vertical" >
</appwidget-provider>

برای اطلاعات بیشتر در مورد ویجت های صفحه اصلی، به مستندات ابزارک های برنامه مراجعه کنید.

چارچوب انیمیشن

  • کلاس ViewPropertyAnimator جدید
    • یک کلاس ViewPropertyAnimator جدید راهی مناسب برای توسعه دهندگان برای متحرک سازی ویژگی های انتخاب شده در اشیاء View فراهم می کند. این کلاس انیمیشن ویژگی ها را خودکار و بهینه می کند و مدیریت چندین انیمیشن همزمان روی یک شی View را آسان تر می کند.

      استفاده از ViewPropertyAnimator ساده است. برای متحرک سازی خصوصیات یک View ، animate() را فراخوانی کنید تا یک شی ViewPropertyAnimator برای آن View بسازید. از متدهای موجود در ViewPropertyAnimator استفاده کنید تا مشخص کنید کدام ویژگی را متحرک کنید و چگونه آن را متحرک کنید. به عنوان مثال، برای محو کردن View به شفاف، alpha(0); . شی ViewPropertyAnimator جزئیات پیکربندی کلاس Animator زیرین و شروع آن و سپس رندر کردن انیمیشن را مدیریت می کند.

  • رنگ پس زمینه انیمیشن
    • متدهای جدید getBackgroundColor() و setBackgroundColor(int) به شما این امکان را می‌دهند که رنگ پس‌زمینه پشت انیمیشن‌ها را فقط برای انیمیشن‌های پنجره‌ها دریافت/تنظیم کنید. در حال حاضر پس زمینه باید سیاه و با هر سطح آلفای دلخواه باشد.
  • دریافت کسر متحرک از ViewAnimator
    • یک متد جدید getAnimatedFraction() به شما امکان می دهد کسر انیمیشن فعلی - کسر سپری شده/ درون یابی شده مورد استفاده در آخرین به روز رسانی فریم - را از یک ValueAnimator دریافت کنید.

چارچوب UI

  • رندر اجباری یک لایه
    • یک متد جدید buildLayer() به برنامه اجازه می‌دهد تا لایه View ایجاد شود و View بلافاصله در آن رندر شود. به عنوان مثال، یک برنامه می تواند از این روش برای رندر یک View در لایه خود قبل از شروع یک انیمیشن استفاده کند. اگر View پیچیده باشد، رندر کردن آن در لایه قبل از شروع انیمیشن از پرش فریم ها جلوگیری می کند.
  • فاصله دوربین
    • برنامه ها می توانند از یک روش جدید setCameraDistance(float) برای تنظیم فاصله بین دوربین تا View استفاده کنند. این به برنامه‌ها کنترل بهتری بر روی تبدیل‌های سه بعدی View، مانند چرخش‌ها، می‌دهد.
  • دریافت نمای تقویم از DatePicker
  • دریافت تماس زمانی که نماها جدا می شوند
  • شنونده پودر سوخاری، امضای جدید onInflate().
  • نمایش نتیجه جستجو در برگه جدید
    • یک کلید داده EXTRA_NEW_SEARCH برای مقاصد ACTION_WEB_SEARCH به شما امکان می دهد جستجو را در یک برگه مرورگر جدید باز کنید، نه در یک برگه موجود.
  • مکان نما متن قابل ترسیم
    • اکنون می توانید با استفاده از ویژگی منبع جدید textCursorDrawable یک قرعه کشی را برای استفاده به عنوان مکان نما متن تعیین کنید.
  • تنظیم فرزند نمایش داده شده در نماهای راه دور
  • کلیدهای عمومی برای گیم پد و سایر دستگاه های ورودی
    • KeyEvent طیف وسیعی از کدهای کلید عمومی را برای قرار دادن دکمه های صفحه بازی اضافه می کند. کلاس همچنین isGamepadButton(int) و چندین روش کمکی دیگر را برای کار با کدهای کلید اضافه می کند.

گرافیک

  • کمک کننده برای مدیریت بیت مپ
    • setHasAlpha(boolean) به یک برنامه اجازه می‌دهد نشان دهد که همه پیکسل‌های یک Bitmap غیرشفاف (نادرست) هستند یا برخی از پیکسل‌ها ممکن است حاوی مقادیر آلفای غیر شفاف باشند (درست). توجه داشته باشید، برای برخی از تنظیمات (مانند RGB_565) این تماس نادیده گرفته می‌شود، زیرا از مقادیر آلفای هر پیکسل پشتیبانی نمی‌کند. این به عنوان یک اشاره ترسیمی است، زیرا در برخی موارد یک بیت مپ که به عنوان مات شناخته شده است می تواند یک مورد ترسیمی سریعتر از نمونه ای که ممکن است مقادیر آلفای غیر شفاف در هر پیکسل داشته باشد، بگیرد.
    • getByteCount() اندازه یک بیت مپ را بر حسب بایت دریافت می کند.
    • getGenerationId() به یک برنامه اجازه می‌دهد بفهمد که آیا Bitmap اصلاح شده است، مثلاً برای کش کردن.
    • sameAs(android.graphics.Bitmap) تعیین می کند که آیا یک بیت مپ داده شده با بیت مپ فعلی از نظر ابعاد، پیکربندی یا داده های پیکسلی متفاوت است یا خیر.
  • تنظیم مکان و چرخش دوربین
    • Camera دو روش جدید rotate() و setLocation() برای کنترل مکان دوربین، برای تبدیل های سه بعدی اضافه می کند.

شبکه

  • قفل وای فای با کارایی بالا
    • یک قفل جدید وای فای با کارایی بالا به برنامه‌ها اجازه می‌دهد تا اتصالات وای‌فای با کارایی بالا را حتی زمانی که صفحه دستگاه خاموش است، حفظ کنند. برنامه‌هایی که موسیقی، ویدیو یا صدا را برای مدت‌های طولانی پخش می‌کنند، می‌توانند قفل Wi-Fi با عملکرد بالا را برای اطمینان از عملکرد پخش حتی زمانی که صفحه نمایش خاموش است، دریافت کنند. از آنجایی که از انرژی بیشتری استفاده می کند، برنامه ها باید در صورت نیاز به اتصال فعال طولانی مدت، وای فای با کارایی بالا را دریافت کنند.

      برای ایجاد یک قفل با کارایی بالا، WIFI_MODE_FULL_HIGH_PERF را به عنوان حالت قفل در تماس با createWifiLock() عبور دهید.

  • آمار ترافیک بیشتر
    • برنامه‌ها اکنون می‌توانند با استفاده از روش‌های جدید در TrafficStats به آمار مربوط به انواع بیشتری از استفاده از شبکه دسترسی داشته باشند. برنامه‌ها می‌توانند از روش‌هایی برای دریافت آمار UDP، تعداد بسته‌ها، بایت‌های ارسال/دریافت بار TCP و بخش‌ها برای یک UID معین استفاده کنند.
  • نام کاربری تایید SIP
    • اکنون برنامه‌ها می‌توانند با استفاده از روش‌های جدید getAuthUserName() و setAuthUserName() نام کاربری SIP aut را برای یک نمایه دریافت و تنظیم کنند.

دانلود منیجر

  • مدیریت دانلودهای تکمیل شده
    • اکنون برنامه‌ها می‌توانند بارگیری‌هایی را آغاز کنند که فقط پس از تکمیل به کاربران اطلاع می‌دهند. برای شروع این نوع دانلود، برنامه‌ها VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION را در متد setNotificationVisibility() شی درخواست ارسال می‌کنند.
    • یک روش جدید، addCompletedDownload() به یک برنامه اجازه می‌دهد فایلی را به پایگاه داده دانلودها اضافه کند تا بتواند توسط برنامه Downloads مدیریت شود.
  • نمایش دانلودها مرتب شده بر اساس اندازه
    • برنامه‌ها می‌توانند با افزودن INTENT_EXTRAS_SORT_BY_SIZE اضافی جدید به یک هدف ACTION_VIEW_DOWNLOADS ، برنامه دانلودها را در حالت مرتب‌سازی به اندازه شروع کنند.

چارچوب IME

  • دریافت کلید مقدار اضافی روش ورودی
    • InputMethodSubtype متد containsExtraValueKey() را اضافه می کند تا بررسی کند که آیا یک رشته ExtraValue برای زیرنوع ذخیره شده است یا خیر و متد getExtraValueOf() برای استخراج یک مقدار کلید خاص از هشمپ ExtraValue اضافه می کند.

رسانه ها

  • فرمت های جدید جریان صوتی
    • چارچوب رسانه پشتیبانی داخلی برای محتوای خام ADTS AAC، برای بهبود جریان صوتی، و همچنین پشتیبانی از صدای FLAC، برای محتوای صوتی فشرده شده با بالاترین کیفیت (بدون تلفات) اضافه می‌کند. برای اطلاعات بیشتر به سند فرمت های رسانه پشتیبانی شده مراجعه کنید.

راه اندازی کنترل در برنامه های متوقف شده

با شروع از Android 3.1، مدیر بسته سیستم برنامه هایی را که در حالت توقف هستند ردیابی می کند و ابزاری برای کنترل راه اندازی آنها از فرآیندهای پس زمینه و سایر برنامه ها فراهم می کند.

توجه داشته باشید که حالت توقف برنامه با حالت توقف فعالیت یکسان نیست. سیستم آن دو حالت متوقف شده را جداگانه مدیریت می کند.

این پلتفرم دو پرچم قصد جدید را تعریف می‌کند که به فرستنده اجازه می‌دهد مشخص کند آیا Intent باید اجازه فعال‌سازی اجزا را در برنامه متوقف شده داشته باشد یا خیر.

  • FLAG_INCLUDE_STOPPED_PACKAGES - فیلترهای هدف برنامه های متوقف شده را در لیست اهداف بالقوه برای حل و فصل قرار دهید.
  • FLAG_EXCLUDE_STOPPED_PACKAGES - فیلترهای هدف برنامه های متوقف شده را از لیست اهداف بالقوه حذف کنید.

هنگامی که هیچ یک یا هر دوی این پرچم ها در یک intent تعریف نشده اند، رفتار پیش فرض این است که فیلترهای برنامه های متوقف شده را در لیست اهداف بالقوه قرار دهید.

توجه داشته باشید که سیستم FLAG_EXCLUDE_STOPPED_PACKAGES به همه اهداف پخش اضافه می کند. این کار را برای جلوگیری از راه‌اندازی سهوی یا غیرضروری مؤلفه‌های برنامه‌های متوقف شده توسط پخش‌های خدمات پس‌زمینه انجام می‌دهد. یک سرویس یا برنامه پس‌زمینه می‌تواند با افزودن پرچم FLAG_INCLUDE_STOPPED_PACKAGES به اهداف پخشی که باید اجازه فعال کردن برنامه‌های متوقف شده را داشته باشند، این رفتار را لغو کند.

برنامه ها زمانی که برای اولین بار نصب می شوند اما هنوز راه اندازی نشده اند و زمانی که به صورت دستی توسط کاربر متوقف می شوند (در مدیریت برنامه ها) در حالت توقف هستند.

اعلان برنامه برای اولین بار راه اندازی و ارتقاء

این پلتفرم اعلان بهبود یافته ای را در مورد اولین راه اندازی برنامه و ارتقاء آن از طریق دو اقدام قصد جدید اضافه می کند:

  • ACTION_PACKAGE_FIRST_LAUNCH - هنگامی که آن برنامه برای اولین بار راه اندازی می شود (یعنی اولین باری که از حالت توقف خارج می شود) به بسته نصب کننده یک برنامه ارسال می شود. داده ها حاوی نام بسته است.
  • ACTION_MY_PACKAGE_REPLACED - به یک برنامه اطلاع می دهد که به روز شده است و یک نسخه جدید روی نسخه موجود نصب شده است. این فقط به برنامه ای که جایگزین شده است ارسال می شود. این شامل هیچ داده اضافی نیست. برای دریافت آن، یک فیلتر قصد برای این عمل اعلام کنید. می‌توانید از intent برای راه‌اندازی کد استفاده کنید که به شما کمک می‌کند پس از ارتقا، برنامه شما به شکل مناسب در حال اجرا برگردد.

    این هدف مستقیماً به برنامه ارسال می‌شود، اما تنها در صورتی که برنامه در حالت شروع (نه در حالت توقف) ارتقا یافته باشد.

ابزارهای اصلی

  • کش LRU
    • یک کلاس جدید LruCache به برنامه‌های شما اجازه می‌دهد از ذخیره‌سازی کارآمد بهره ببرند. برنامه‌ها می‌توانند از کلاس برای کاهش زمان صرف شده برای محاسبات یا دانلود داده‌ها از شبکه استفاده کنند، در حالی که ردپای حافظه معقولی را برای داده‌های کش حفظ می‌کنند. LruCache حافظه پنهانی است که ارجاعات قوی به تعداد محدودی از مقادیر را در خود دارد. هر بار که به یک مقدار دسترسی پیدا می شود، به سر یک صف منتقل می شود. هنگامی که یک مقدار به یک حافظه پنهان کامل اضافه می شود، مقدار در انتهای آن صف حذف می شود و ممکن است برای جمع آوری زباله واجد شرایط شود.
  • توصیف کننده فایل به صورت int
    • اکنون می توانید با استفاده از یکی از متدهای جدید getFd() یا detachFd() توصیفگر فایل بومی int را برای یک ParcelFileDescriptor دریافت کنید.

وب کیت

  • کوکی های طرح فایل
    • CookieManager اکنون از کوکی هایی پشتیبانی می کند که از طرح file: URI استفاده می کنند. می‌توانید از setAcceptFileSchemeCookies() برای فعال/غیرفعال کردن پشتیبانی از کوکی‌های طرح فایل، قبل از ساختن نمونه‌ای از WebView یا CookieManager استفاده کنید. در یک نمونه CookieManager ، می‌توانید با فراخوانی allowFileSchemeCookies() بررسی کنید که آیا کوکی‌های طرح فایل فعال هستند یا خیر.
  • اطلاع رسانی درخواست ورود
    • برای پشتیبانی از ویژگی‌های لاگین خودکار مرورگر معرفی‌شده در اندروید 3.0، روش جدید onReceivedLoginRequest() به برنامه میزبان اطلاع می‌دهد که درخواست ورود خودکار برای کاربر پردازش شده است.
  • کلاس ها و رابط ها حذف شده است
    • چندین کلاس و رابط از API عمومی حذف شدند، پس از اینکه قبلاً در حالت منسوخ قرار داشتند. برای اطلاعات بیشتر به گزارش تفاوت های API مراجعه کنید.

مرورگر

برنامه مرورگر ویژگی های زیر را برای پشتیبانی از برنامه های وب اضافه می کند:

  • پشتیبانی از پخش درون خطی ویدیوهای تعبیه شده در تگ <video> HTML5. در صورت امکان پخش از طریق سخت افزار تسریع می شود.
  • پشتیبانی لایه برای عناصر موقعیت ثابت برای همه سایت ها (موبایل و دسکتاپ).

ثابت های ویژگی جدید

این پلتفرم ثابت‌های ویژگی‌های سخت‌افزاری جدیدی را اضافه می‌کند که توسعه‌دهندگان می‌توانند در مانیفست‌های برنامه خود اعلام کنند تا به نهادهای خارجی مانند Google Play از نیاز برنامه برای قابلیت‌های سخت‌افزار جدید پشتیبانی‌شده در این نسخه از پلتفرم اطلاع دهد. توسعه دهندگان این و سایر ثابت های ویژگی را در عناصر مانیفست <uses-feature> اعلام می کنند.

  • android.hardware.usb.accessory - این برنامه از USB API برای برقراری ارتباط با دستگاه های سخت افزاری خارجی متصل شده از طریق USB و عملکرد به عنوان میزبان استفاده می کند.
  • android.hardware.usb.host - این برنامه از USB API برای برقراری ارتباط با دستگاه های سخت افزاری خارجی متصل شده از طریق USB و عملکرد به عنوان دستگاه استفاده می کند.

Google Play برنامه ها را بر اساس ویژگی های اعلام شده در عناصر مانیفست <uses-feature> فیلتر می کند. برای اطلاعات بیشتر درباره اعلام ویژگی‌ها در مانیفست برنامه، فیلترهای Google Play را بخوانید.

گزارش تفاوت های API

برای مشاهده جزئیات همه تغییرات API در Android 3.1 (سطح 12 API)، به گزارش تفاوت های API مراجعه کنید.

سطح API

پلتفرم Android 3.1 نسخه به روز شده ای از چارچوب API را ارائه می دهد. به API Android 3.1 یک شناسه عدد صحیح - 12 - اختصاص داده شده است که در خود سیستم ذخیره می شود. این شناسه که "سطح API" نامیده می شود، به سیستم اجازه می دهد تا قبل از نصب برنامه به درستی تعیین کند که آیا یک برنامه با سیستم سازگار است یا خیر.

برای استفاده از API های معرفی شده در Android 3.1 در برنامه خود، باید برنامه را در مقابل کتابخانه اندرویدی که در پلتفرم Android 3.1 SDK ارائه شده است، کامپایل کنید. بسته به نیازتان، ممکن است لازم باشد یک ویژگی android:minSdkVersion="12" نیز به عنصر <uses-sdk> در مانیفست برنامه اضافه کنید.

برای اطلاعات بیشتر، سطح API چیست؟