Jetpack اندیشه و چه برای آندروید را Jetpack آندروید پشتیبانی کتابخانه

اسناد رسمی آندروید یعنی Android Jetpack توصیف به عنوان “مجموعه کتابخانه ها، ابزار و ارشاد معماری.” این توضیحات مبهم بسیاری از توسعه دهندگان چیست Jetpack آندروید واقعا تعجب را ترک کرده است. نگاهی به لیست قطعات Jetpack اندیشه تنها در نظر گرفتن سوالات حتی بیشتر افزایش می دهد — تن متقاطع با موجود کتابخانه اندیشه و پروژه ها به وضوح وجود دارد.

یک تکه از قطعات به نظر می رسد مستقیم از کتابخانه پشتیبانی مانند AppCompat گرفته شده است. بنابراین، آندروید فقط Jetpack حمایت کتابخانه rebranded است؟ جایگزینی دارد؟ شما می توانید دو پهلو به پهلو از، و یا همه ما مهاجرت باید برنامه های ما به Jetpack

اجزای کتابخانه پشتیبانی ویژگی فقط آشنا در لیست قطعات Jetpack نیست. اجزاء معماری (Lifecycles LiveData اتاق و ViewModel) در حال حاضر بخشی از Jetpack, بیش از حد است.

برای اضافه کردن به سردرگمی که 2018 I/O گوگل به روز رسانی کتابخانه های آینده پشتیبانی به ما آموخته به فضای اندیشه. پشتیبانی و به فضای androidx جدید به عنوان بخشی از AndroidX منتشر خواهد شد. این ما به ارمغان می آورد به مجموع بزرگ از سه پروژه است که به نظر می رسد به برخی از تداخل با Jetpack — و ما هنوز هیچ نزدیک به بدانند چه Jetpack واقع یخ!

اگر Google I/O 2018 شما با سوالات بیشتر از جواب باقی مانده است، سپس در این مقاله ما می شود مصرف نگاه دقیق تری به پروژه های پشتیبانی کتابخانه، AndroidX و اجزاء معماری و اسطوره زدائی چگونه تمام این قطعات متناسب با Jetpack اندیشه پازل.

اندیشه Jetpack چیست؟

Jetpack آندروید مجموعه ای از کتابخانه های unbundled نه گره خورده به هر نسخه خاص از اندیشه, توسعه دهندگان راه برای حمایت از ویژگی های جدید در نسخه قدیمی سیستم عامل آندروید فراهم می کند. علاوه بر این دو سازگاری Jetpack وعده به شما کمک کند کار بیشتری انجام است, با کد کمتر با ارائه کدها برای رسیدگی به کارهای تکراری مانند مدیریت چرخه حیات نرم افزار.

اجزای Jetpack اندیشه به این دسته تقسیم: بنیاد

  • این توانایی سیستم هسته مانند AppCompat را پوشش می دهد.
  • UI- این رده برای رابط کاربر متمرکز اجزاء، از جمله قطعه و چیدمان، بلکه برای اجزاء است که به تلفن های هوشمند مانند خودرو تلویزیون و پوشیدن سیستم عامل توسط گوگل (که قبلا Android پوشیدن) محدود نشده است.
  • معماری- این است که در آن شما پیدا ماژول ها برای کمک به رسیدگی به چالش های اطراف تداوم داده و چرخه حیات نرم افزار.
  • رفتار- این رده در کل حاوی ماژول ها مانند مجوز اعلان ها و به اشتراک گذاری.

اندیشه Jetpack نیز معرفی پنج مولفه تجاری:

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

به طور پیش فرض، WorkManager بلافاصله اجرا وظیفه در یک تاپیک جدید پس زمینه، اما براساس عواملی مانند سطح API و اینکه آیا دستگاه دسترسی به بازی گوگل است اگر شما برنامه را اجرا نمی کند، آن مناسب ترین راه کار، زمانبندی انتخاب کنید خدمات. توجه به این عوامل WorkManager کار JobScheduler Firebase JobDispatcher یا پیاده سازی سیستم مدیریت و BroadcastReceiver سفارشی با استفاده از برنامه ممکن است.

ناوبری

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

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

صفحه بندی

تلاش برای دانلود و مقدار زیادی از داده ها به ارائه همه در یک بار هرگز منجر به تجربه کاربر خوب!

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

صفحه بندی مطالب می توانید از شبکه های محلی و یا بر روی شبکه بار و آثار خارج-از-جعبه با اتاق LiveData و RxJava.

برش برش

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

برش می توانید نمایش محدوده استاتیک و تعاملی محتوا، از جمله تصاویر، لینک های ویدئو های عمیق، تبدیل، و لغزنده, و آنها می تواند پویا و به روز رسانی به حوادثی که اتفاق می افتد داخل برنامه مرتبط.

 Jetpack اندیشه

KTX آندروید این مجموعه ای از ماژول های متشکل از گسترش دهنده است که پلت فرم آندروید APIs را برای Kotlin بهینه سازی است. با استفاده از این افزونه کد شما بیشتر می توانید Kotlin مختصر و قابل خواندن، به عنوان مثال با استفاده از هسته androidx.: ماژول هسته ktx، شما می توانید تبدیل: sharedPreferences

. ویرایش (). putBoolean (مقدار "کلید"). () 

را به اعمال می شود:

 sharedPreferences. ویرایش {putBoolean (مقدار "کلید")} 

توجه داشته باشید که اندیشه KTX واقع هیچ ویژگی های جدید برای آندروید APIs موجود اضافه نمی کند.

Jetpack اندیشه است به جای کتابخانه پشتیبانی?

پشتیبانی از کتابخانه به کمک توسعه دهندگان پشتیبانی ویژگی های اخیر بستر های نرم افزاری بر روی دستگاه های در حال اجرا نسخه های قدیمی تر از اندیشه, توسط پیاده سازی سازگار با قبلیها از کلاس های مهم و روش ارائه شده است.

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

اگر این زیادی مثل Jetpack اندیشه، دلیلی برای آن وجود دارد. Jetpack آندروید موجود کتابخانه ها پشتیبانی می گیرد و آنها را در یک مجموعه جدید از اجزای پایان می رسد. همانطور که گوگل در حال حاضر برنامه ای برای انتشار به روز رسانی به کتابخانه پشتیبانی و اندیشه Jetpack حال، شده Jetpack اندیشه به جای کتابخانه پشتیبانی موجود است.

در حالی که Jetpack قطعات به هم و با بازی طراحی شده اند، آنها می تواند عمل مستقل. این به این معنی آن است نه لزوما مساله “Jetpack یا کتابخانه پشتیبانی?” وجود دارد بدون هیچ دلیل به استفاده از Jetpack قطعات و پشتیبانی کتابخانه جانبی توسط سمت، که دقیقا آنچه ما در این قطعه از وظایف زمانبندی پس زمینه ما با WorkManager مقاله در حال انجام است:

 وابسته {اجرای fileTree (dir: 'libs' ، عبارتند از: ['*.jar']) اجرای "اندیشه arch. کار: کار زمان اجرا: 1.0.0-alpha02" اجرای "com. اندیشه. پشتیبانی: appcompat-v7:27.1.1" اجرای "com. اندیشه. پشتیبانی. محدودیت: محدودیت طرح: 1.1.0"
   androidTestImplementation "com. اندیشه. پشتیبانی. test: دونده: 1.0.1" androidTestImplementation "com. اندیشه. پشتیبانی. test. اسپرسو: اسپرسو هسته: 3.0.1" 

در اینجا، ما با استفاده از Jetpack را جزء WorkManager کنار قطعات مختلف از کتابخانه پشتیبانی.

که در آن اجزاء معماری متناسب شود؟

اگر شما را از طریق لیست قطعات Jetpack خوانده شده و سپس شما را متوجه شده که آن نیز شامل اجزاء معماری:

  • Lifecycles. این کتابخانه برای مدیریت برنامه lifecycles و اجتناب از نشت حافظه با ایجاد اجزای چرخه عمر آگاه است که پاسخ به تغییرات در وضعیت چرخه عمر دیگر قطعات است.
  • ViewModel. داده های مربوط به رابط کاربر است اغلب از دست رفته در تغییرات پیکربندی مثل چرخش صفحه نمایش. از ViewModel اشیاء در سراسر تغییرات پیکربندی حفظ می شوند، شما این کلاس برای اطمینان از خود اطلاعات موجود، به باقی می ماند حتی پس از فعالیت و یا قطعه شده نابود شده است و سپس دوباره استفاده کنید.
  • LiveData. داده های چرخه عمر آگاه دارنده کلاس A که به شما کمک می کند تا برای جلوگیری از نشت حافظه توسط تنها اجزاء نرم افزار به روز رسانی هنگامی که آنها در حالت فعال آغاز یا RESUMED.
  • اتاق. این SQLite نقشه برداری شی هدف کتابخانه درد از مدیریت پایگاه داده ایجاد کش محلی درخواست شما داده ها را به باقی می ماند در دسترس، حتی زمانی که یک اتصال اینترنتی فعال نمی باشد.

این مولفه ها تنها در حال حاضر به عنوان بخشی از Jetpack اندیشه، اما از آنجایی که وابسته همان موجود باقی می ماند، این بیشتر از تغیر میدهند چیزی شما نیاز به عمل است.

در این مرحله ما می دانیم Jetpack ترکیب اجزای کتابخانه پشتیبانی مانند AppCompat با اجزاء معماری اعلام کرد که Google I/O 2017. شما می توانید نگه دارید با استفاده از ماژول ها در کتابخانه پشتیبانی، به خود معادل Jetpack, یا با استفاده از ترکیبی از این دو اگر چه اجزاء معماری حال حاضر بخشی از Jetpack در نظر گرفته.

این ما را با Google I/O 2018 نهایی مربوط به کتابخانه پشتیبانی اعلام برگ: AndroidX.

باید تبدیل به androidx. * فضای نام?

امروز, نظر بسیاری از پشتیبانی کتابخانه یک بخش اساسی از توسعه نرم افزار آندروید به نقطه که در آن این 99 درصد از برنامه های کاربردی بازی گوگل بزرگ استفاده می شود. با این حال، تناقضات را رخنه در اطراف کنوانسیون نامگذاری کتابخانه به کتابخانه پشتیبانی رشد کرده است.

در ابتدا، نام هر بسته نشان داد حداقل سطح API پشتیبانی توسط آن بسته به عنوان مثال پشتیبانی v4. با این حال، نسخه 26.0.0 پشتیبانی کتابخانه افزایش یافته API حداقل 14 دو تا امروز بسیاری از نام های بسته اند هیچ ارتباطی با حداقل سطح API پشتیبانی. زمانی که پشتیبانی v4 و بسته پشتیبانی v7 هر دو API حداقل 14، آن آسان است برای دیدن چرا مردم اشتباه می!

حتی اندیشه اسناد رسمی این مشکل اعتراف:

“هنگام کار کردن با هر انتشار جدید کتابخانه پشتیبانی شما نیست که فرض باید نماد بسته # v حداقل API پشتیبانی سطح را نشان می دهد..”

برای روشن کردن این سردرگمی، گوگل در حال حاضر کتابخانه پشتیبانی به ساختار جدید اندیشه گسترش کتابخانه (AndroidX) بسته refactoring است. AndroidX نام بسته ساده و همچنین artifactIds معده و groupIds است که محتویات هر بسته و آن سطح API پشتیبانی بهتر قابلیت.

با نامگذاری کنوانسیون فعلی آن نیز بسته های که همراه با سیستم عامل آندروید و که با درخواست شما APK (اندیشه بسته کیت) بسته بندی شده روشن نیست. برای روشن کردن این سردرگمی تمام کتابخانه های unbundled به AndroidX را androidx. منتقل خواهد شد * فضای نام در حالی که اندیشه. * سلسله مراتب بسته می خواهد برای بسته هایی که با سیستم عامل آندروید کشتی محفوظ است.

شامل نقشه refactoring AndroidX نگاشت خاص بین طبقات قدیمی و جدید و ساخت مصنوعات قدیمی و جدید اما به عنوان یک قاعده کلی شما می توانید انتظار برای مواجهه با این الگوها نقشه برداری:

اندیشه. پشتیبانی. * > androidx. @

اندیشه. داده ها اتصال. * androidx >. اتصال های داده. @

اندیشه. طراحی * > com. گوگل. اندیشه مواد. @

اندیشه. پشتیبانی. test. * androidx >. test. @

یکی دیگر از تغییرات مهم است که آثار AndroidX به روز رسانی مستقل، بنابراین شما به روز رسانی کتابخانه های AndroidX فردی در پروژه های خود، به جای داشتن وابستگی هر که یک بار تغییر قادر خواهید بود. کسانی که خسته کننده “همه com. اندیشه. پشتیبانی دقیق همان مشخصات نسخه استفاده از کتابخانه های باید” پیام های باید تبدیل به چیزی از گذشته!

با توجه به وبلاگ گوگل ما می توانیم بفهمیم موازی به روز رسانی به آندروید. پشتیبانی بسته بندی کتابخانه ها در طول مدت بازه زمانی پیش نمایش P اندیشه انتظار اما نسخه پایدار 28.0.0 می خواهد نسخه نهایی از ویژگی های بسته بندی به عنوان پشتیبانی آندروید. .

بدون در نظر گرفتن اینکه آیا شما حرکت به اندیشه Jetpack, با کتابخانه پشتیبانی چوب یا استفاده از ترکیبی از این دو، در نهایت شما باید تبدیل به جدید androidx. * فضای نام.

دو راه برای ایجاد تغییر به AndroidX وجود دارد:

ایجاد یک پروژه است که AndroidX را از جعبه

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

 اندروید. useAndroidX = درست
اندیشه-enableJetifier = درست Refactor 

پروژه موجود آندروید 3.2 استودیو دارای قابلیت refactoring است که می توانید کد خود، منابع، بروز رسانی و پیکربندی Gradle دو مرجع AndroidX شی ء و کلاس. برای refactor پروژه خود را انتخاب کنید Refactor Refactor AndroidX > دو… از نوار ابزار اندیشه استودیو.

 اندیشه Jetpack

تا

بندی در حال حاضر ما در بررسی اطلاعیه Google i/o و چگونه با هم تداخل اجزای موجود با Jetpack اندیشه، ما در نهایت آماده برای پاسخ به سوال اصلی ما (ها)!

اندیشه Jetpack طول می کشد اجزای موجود پشتیبانی کتابخانه ترکیبی از آنها را با اجزاء معماری سال گذشته و چند اجزای جدید اضافه می کند. هیچ برنامه ای برای کنار گذاشتن کتابخانه پشتیبانی فقط رتبهدهی نشده است، اگر جزء از طریق پشتیبانی کتابخانه و اندیشه Jetpack, بنابراین شما هنوز هم می توانید انتخاب کنید که پیاده سازی استفاده از وجود دارد. با این حال، نسخه 28.0.0 نسخه آخرین آندروید پشتیبانی خواهد بود. پس از آن شما باید به حرکت androidx. * فضای نام.

هر گونه اطلاعیه Google i/o دیگر که شما را با سوالات بیشتر از جواب باقی مانده است؟ ما در نظرات زیر می دانم!

کاوش اندیشه P برش: برش های تعاملی و پویا

ایجاد کار سخت نیست بیش از فقط به خاطر اینکه شما با موفقیت برنامه خود را منتشر و ساخته شده است تا پایگاه کاربر. هنگامی که شما مخاطبان خود را پیدا کرده ام، شما نیاز به آویزان بر روی آنها!

که امسال من/خروجی، گوگل اعلام کرد برش آندروید از ویژگی های جدید به کمک کاربران با درخواست خود را مشغول نگه دارید. برش اندیشه در مکان های که در آن بسیاری از کاربران آندروید صرف بسیاری از زمان، بنابراین آنها یک راه موثر برای نگه داشتن کاربران آینده به درخواست خود را از جمله نتایج جستجوی گوگل ظاهر می شود.

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

برش اندیشه چیست؟

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

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

تصور کنید شما نصب app برای رزرو بلیط برای سینمای محلی خود را. دفعه بعد که شما Googling آخرین فیلمهای شما نتایج جستجوی معمولی و شاید که برنامه «کتاب، هم» قاچ کنید. این اجازه می دهد تا به شما در رزرو بلیط برای دیدن این فیلم در سینما های محلی خود را بدون نیاز به حرکت به دور از نتایج جستجوی خود را.

از دیدگاه کاربر، این خلال آنها با دسترسی آسان و سریع به ویژگی های مورد نیاز آنها را در آن لحظه دقیق فراهم کرده است. از دیدگاه توسعه دهنده این تکه کردم نرم افزار خود را مقابل کاربر در زمینه های مربوطه و موفقیت آنها را دوباره درگیر.

بنابراین آنها را در همه چیز، از اندیشه 4.4 پشتیبانی کنید بعد برش اندیشه نیز بخشی از Jetpack اندیشه است. به گفته گوگل اگر برش را به پروژه خود اضافه برش پتانسیل رسیدن به 95 درصد از تمام کاربران آندروید دارید!

شما قطعه اول ایجاد برش

می تواند انجام مجموعه اقدامات، اما بیایید نگهداری چیزهای در حال حاضر ساده و ایجاد یک تکه است که ما استفاده MainActivity راه اندازی شد.

با ایجاد یک پروژه جدید با استفاده از آخرین ساخت قناری اندیشه استودیو 3.2 شروع و سپس پروژه شما ساخت. gradle فایل و باز اضافه کنید androidx. تکه وابسته. برای نگه داشتن چیزهای سازگار، من همچنین فضای AndroidX برای وابستگی های دیگر استفاده می کنم. وابستگی

 {اجرای fileTree (شما: 'libs' شامل: ['*.jar']) اجرای ' androidx. appcompat: appcompat: 1.0.0-alpha1 'اجرای' androidx. constraintlayout: constraintlayout: 1.1.0 ' اجرای ' androidx خلال: خلال هسته: 1.0.0-alpha2 'اجرای' androidx. تکه: سازندگان قطعه: junit 'testImplementation' 1.0.0-alpha2: junit: 4.12' androidTestImplementation ' androidx-test: دونده: 1.1.0-alpha1 'androidTestImplementation' androidx test. اسپرسو: اسپرسو هسته: 3.1.0-alpha1 '} 

در زمان نگارش روند ایجاد یک تکه گاهی ناشی از استودیو اندیشه برای افزودن خودکار وابسته برش هسته و سازندگان قطعه تکراری. اگر مواجهه با پیغام خطا عجیب بررسی ساخت . gradle فایل شما برای اطمینان از این اتفاق افتاده.

ایجاد برش دهنده

تکه جزء است که امکان نمایش برش خارج از برنامه خود را در نتایج جستجوی گوگل است.

برای ایجاد کننده تکه:

  • کنترل کلیک کردم پروژه شما بسته “src”، دو جدید… > دیگر > برش دهنده .
  • نام این قطعه ارائه دهنده “MySliceProvider.”
  • کلیک کنید “پایان”.

هر بار که برنامه میزبان نیاز برای نمایش یک تکه، آن درخواست اتصال به دهنده تکه، با یکنواخت منبع شناسه (URI) قاچ می خواهد آن را برای نمایش ارسال. ارائه دهنده قطعه سپس تماس () onCreateSliceProvider و ساخت تکه با تماس onBindSlice () روش . در نهایت، onBindSlice () روش را تکه بازگشت و تصویب آن را به نرم افزار میزبان.

اگر کلاس MySliceProvider خود را به باز کردن کد به صورت خودکار فراهم می کند مروری بر روند این:

 واردات اندیشه. محتوای. ContentResolver;
اندیشه. محتوای. زمینه واردات;
اندیشه. محتوای. قصد وارد کردن;
اندیشه. خالص. نوع واردات;

androidx. مشخصه. NonNull واردات;
واردات androidx حاشیه نویسی system.nullable;
androidx. قاچ. تکه وارد;
androidx. قطعه. SliceProvider واردات;
androidx. قاچ. سازندگان. ListBuilder واردات;
androidx. قاچ. سازندگان. ListBuilder. RowBuilder واردات;

ایجاد یک کلاس است که SliceProvider / / گسترش کلاس های عمومی MySliceProvider SliceProvider {//Initialize دهنده قاچ onCreateSliceProvider//@Override عمومی onCreateSliceProvider بولی () {بازگشت درست؛ تماس با
   } @Override @NonNull عمومی Uri onMapIntentToUri (@Nullable قصد قصد) {Uri ساز جدید uriBuilder نوع ساز () =. طرح (ContentResolver. SCHEME_CONTENT);
       اگر (قصد == null) بازگشت uriBuilder. ساخت ()؛
       نوع داده ها = قصد. getData ()؛
       اگر (داده! = تهی && داده. getPath ()! = تهی) {رشته مسیر داده. getPath () =. جایگزین ("/"، "");
           uriBuilder uriBuilder =. مسیر (مسیر);
       } چهار چوب چهار چوب = getContext ()؛
       اگر (متن! = تهی) {uriBuilder uriBuilder =. اقتدار (getPackageName مضمون. ());
       } بازگشت uriBuilder. ساخت ()؛
   } //Build تکه / / عمومی برش onBindSlice (نوع sliceUri) {چهار چوب چهار چوب = getContext ()؛
       اگر (چهار چوب == null) بازگشت {پوچ;
       } //Check مسیر URI / / اگر (sliceUri. getPath (). برابر ("/")) {//Create ListBuilder است که شما می کنید اضافه کردن ردیف به برش خود را / / //Construct ListBuilder ((getContext)، sliceUri) جدید بازگشت ردیف خود را با استفاده از RowBuilder و سپس آنها را به لیست اضافه کنید / /

                   . addRow (RowBuilder جدید (متن، sliceUri). setTitle ("نوع یافت."))

ساخت لیست / /. ساخت ()؛
      } دیگری {بازگشت جدید ListBuilder (چهار چوب، sliceUri). addRow (RowBuilder جدید (متن، sliceUri). setTitle ("نوع نشد."))
                  . ساخت ()؛
       @Override}} / / توجه داشته باشید که ما هنر یک تکه در این مقاله را پوشش نمی / / عمومی خالی onSlicePinned (نوع sliceUri) {//Register هر ناظران است که باید برای مطلع شدن از تغییرات در داده های تکه / /} @Override عمومی onSliceUnpinned خالی (Uri sliceUr در) {نشت //Don ŧ را فراموش کرده ام به unregister هر ناظران برای جلوگیری از حافظه / /}} 

از SliceProvider سازنده است، آن را در پروژه شما بیانیه اعلام است. هنگامی که شما ایجاد کننده تکه با استفاده از استودیو اندیشه با رفتن به جدید … > دیگر > برش دهنده ، این اعلامیه به آشکار خود را به طور خودکار اضافه می شود:

    

                     

ساخت آندروید خود را برش سلامت: اگر این تکه اندیشه می گذرد، برای راه اندازی برنامه ما MainActivity [194ایجادخلالعمل

59008]، ما نیاز به ایجاد برخی از تغییرات در ارائه دهنده تکه: تعریف

SliceAction

شما را یک تکه تعاملی با ایجاد یک یا چند عمل بریدن. SliceAction شامل استفاده از عنوان آیکون و PendingIntent که تعامل با کاربر در برش های خود دسته.

من می روم برای تعریف اقدام تکه تنها برای راه اندازی برنامه ما MainActivity .

 عمومی createActivityAction SliceAction () {قصد قصد = جدید قصد ((getContext)، MainActivity-کلاس);
       بازگشت جدید SliceAction (PendingIntent. getActivity ((getContext) قصد 0، 0), IconCompat-createWithResource (getContext ()، رضا drawable. ic_home)، "راه اندازی MainActivity");
   } 

پس از آن، من می روم به این علامت به عنوان اقدام اولیه تکه هر زمان که تعامل کاربر با هر قسمت برش آن را آغاز کنید:

 createSlice های عمومی تکه (نوع sliceUri) {activityAction SliceAction (createActivityAction) =;... setPrimaryAction (activityAction); 

تعریف خلال مطالب

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

برای ساخت یک قطعه رابط کاربر، شما نیاز به پیاده سازی ListBuilder ، تعیین نوع ردیف می خواهید نمایش داده و تعریف محتوا برای هر ردیف.

در حال حاضر، بیایید نگهداری چیزهای ساده و اساسی RowBuilder ، که پشتیبانی از همه نوع مطالب زیر استفاده کنید:

  • A مورد عنوان. به نظر می رسد این در آغاز سطر. مورد عنوان می تواند زمان مهر و موم کردن تصویر یا SliceAction.
  • عنوان. این خط از متن قالب بندی شده به عنوان یک عنوان است.
  • زیرنویس. این خط از متن به عنوان متن معمولی قالب بندی است.
  • مورد شروع. این می تواند یک نماد مهر زمان یا SliceAction .
  • آیتم های پایان. اینها مواردی است که در انتهای هر ردیف ظاهر می شود. شما می توانید چند مورد پایان برای هر ردیف عرضه اما فضای موجود برخی از این موارد پایان در دستگاه های خاص نمایش داده نمی شود ممکن است. موارد شروع و پایان یا می توانید برچسب زمان آیکون یا SliceAction.
  • عمل اصلی. این عمل که باعث می خواهید هر زمان که کاربر شیپور خاموشی t باشداو ردیف.

برای نگهداری چیزهای ساده، من برای ایجاد یک ردیف تنها متشکل از عنوان “راه اندازی MainActivity” می روم.

 واردات اندیشه. حدود PendingIntent;
اندیشه. محتوای. قصد وارد کردن;
اندیشه. خالص. نوع واردات;

واردات androidx. هسته. گرافیک. drawable. IconCompat;
androidx. قاچ. تکه وارد;
androidx. قطعه. SliceProvider واردات;
androidx. قاچ. سازندگان. ListBuilder واردات;
androidx. قاچ. سازندگان. SliceAction واردات;

گسترش کلاس های عمومی MySliceProvider SliceProvider {@Override عمومی onCreateSliceProvider بولی () {بازگشت درست؛
   } @Override عمومی برش onBindSlice (نوع sliceUri) {نهایی مسیر رشته = sliceUri. getPath ()؛
       سوئیچ (مسیر) {//Define تکه است نوع; من با استفاده از ' mainActivity ' //case "/ mainActivity": createSlice (sliceUri)؛ بازگشت
       } بازگشت پوچ;
   } عمومی برش createSlice (نوع sliceUri) {activityAction SliceAction = createActivityAction ()؛

ایجاد ListBuilder / / ListBuilder listBuilder = ListBuilder جدید ((getContext)، sliceUri، ListBuilder. بی نهایت);

ایجاد RowBuilder / / ListBuilder-RowBuilder rowBuilder = //Set ListBuilder. RowBuilder (listBuilder) جدید متن عنوان / /. setTitle ("راه اندازی MainActivity.")

تنظیم ردیف عمل اصلی / /. setPrimaryAction (activityAction);

اضافه کردن سطر به ListBuilder / / listBuilder. addRow (rowBuilder);

ساخت لیست / / بازگشت listBuilder. ساخت ()؛
   } عمومی () createActivityAction SliceAction {قصد قصد = جدید قصد ((getContext)، MainActivity-کلاس);
       بازگشت جدید SliceAction (PendingIntent. getActivity ((getContext) قصد 0، 0), IconCompat-createWithResource (getContext ()، رضا drawable. ic_home)، "راه اندازی MainActivity");
   }} 

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

آزمایش برش اندیشه با قاچ Viewer

در زمان نگارش، شما فقط خود برش آندروید گوگل در قاچ Viewer نرم افزار که تقلید چگونه برش سرانجام در نتایج جستجوی گوگل ظاهر خواهد شد با استفاده از test می تواند.

برای نصب قاچ Viewer:

  • را مطمئن شوید که دستگاه شما آندروید به شما موتور متصل شده و یا خود اندیشه مجازی دستگاه (AVD) تا است و در حال اجرا.
  • دانلود حدود قاچ Viewer
  • حرکت APK قاچ Viewer به پوشه اندیشه/sdk/بستر های نرم افزاری-ابزارها .
  • باز کردن یک اعلان فرمان (ویندوز) یا ترمینال (مک).
  • تغییر دایرکتوری (“cd”)، بنابراین پنجره اشاره در پوشه اندیشه/sdk/بستر های نرم افزاری-ابزارها مانند این:

سی دی/کاربران/jessicathornsby/کتابخانه/اندیشه/sdk/بستر های نرم افزاری-

  • نصب ابزار قاچ Viewer APK در خود دستگاه اندیشه یا AVD تایپ دستور زیر را در خط فرمان و یا پنجره ترمینال و سپس با فشار دادن کلید را وارد کنید:

. / بانک انکشاف آسیایی نصب نی قاچ viewer. apk

بعد، شما نیاز به ایجاد پیکربندی تکه اجرا و تصویب آن خود تکه های منحصر به فرد URI: رفتن

  • به اجرای > ویرایش تنظیمات… از نوار ابزار اندیشه استودیو.
  • کلیک بر روی آیکون کوچک “+” و سپس “آندروید App.”

  • “بریدن به نام” وارد کنید.
  • باز کردن کشویی “ماژول” و سپس انتخاب منوی کرکره ای باز “پرتاب” حدود”
  • ، و”آدرس”را انتخاب کنید
  • بعد، آدرس برش خود را در قالب قطعه-content://package-name/slice-URL وارد کنید. است به عنوان مثال، آدرس من خلال: خلال content://com.jessicathornsby.launchslice/mainActivity

    کلیک کنید خوب.

  • را انتخاب کنید اجرای > تکه از نوار ابزار اندیشه استودیو اجرا و دستگاه خود را انتخاب کنید.

این برنامه خواهد شد در حال حاضر نصب شده بر روی دستگاه شما آندروید. قاچ Viewer قادر به درخواست مجوز برای دسترسی به برنامه خود را برش را; از دست دادن اجازه و برش خود را روی صفحه ظاهر شود.

قطعه “راه اندازی MainActivity” دکمه را کلیک کنید و تکه باید پاسخ درخواست شما MainActivity راه اندازی شده توسط.

دانلود برنامه به پایان رسید از GitHub.

ایجاد تکه پویا

بیایید حرکت بر روی چیزی هیجان انگیز تر و ایجاد برش پویا است که اجازه می دهد تا کاربران برای ارتباط برقرار کردن با نرم افزار مربوط به طور مستقیم از رابط کاربری تکه.

این نرم افزار دوم برای نمایش ارزش کاربر می تواند به افزایش و کاهش یا از نرم افزار خود و یا از تکه می گذرد. بنابراین آنها همیشه دسترسی به آخرین اطلاعات بدون در نظر گرفتن اینکه آیا کاربر تغییر مقدار در برنامه یا تکه، داده های جدید در سراسر هر دو اجزای همگام سازی می شود.

برای ساخت این قطعه ایجاد یک پروژه جدید یا بروز رسانی برنامه های موجود شما. اگر شما تصمیم به ایجاد یک پروژه تازه و سپس شما نیاز به راه اندازی زیر تکرار کنید:

  • ایجاد کلاس MySliceProvider ، کنترل کلیک کردن پوشه “src” پروژه شما و جدید انتخاب… > دیگر > [برشدهنده.
  • اضافه کردن زیر وابسته به خود فایل gradle ساخت.: وابسته
 {اجرای fileTree (شما: 'libs' شامل: ['*.jar']) اجرای ' androidx-appcompat: appcompat: 1.0.0-alpha1 ' اجرای ' androidx. constraintlayout: constraintlayout: 1.1.0 'اجرای' androidx. حاشیه نویسی: حاشیه نویسی: 1.0.0-alpha1 'اجرای' androidx. قطعه: تکه هسته: 1.0.0-alpha2 'اجرای' androidx. تکه: سازندگان قطعه: 1.0.0-alpha2 '
   testImplementation ' junit: junit: 4.12' androidTestImplementation ' androidx-test: دونده: 1.1.0-alpha2 'androidTestImplementation' androidx. test. اسپرسو: اسپرسو هسته: 3.1.0-alpha2 '} 

ایجاد طرح نرم افزار

شروع ایجاد رابط کاربر برنامه را.

پروژه خود را activity_main . xml فایل را باز کرده و ایجاد “افزایش” و دکمه “کاهش” به علاوه TextView دو نهایت نمایش برنامه پویا ارزش:

    

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

   dynamicSlice 
    Count:%du00B   

ایجاد بردار را با بردار مرکز دارایی

در خلال، من می خواهم برای نمایش “تا” و “پایین” فلش است که به تغییر ارزش برنامه شنود گذاشته: کنترل کلیک کنید

  • پروژه شما “پژوهش” دایرکتوری و را انتخاب کنید جدید > سرمایه برداری .
  • با کلیک بر روی آیکون “قطعه هنری” کمی.
  • منبع “پیکان به سمت بالا” را انتخاب کنید و سپس روی تأیید کلیک کنید.
  • دارایی های خود را به نام “ic_count_up” و سپس روی بعدی کلیک کنید.
  • پایان را کلیک کنید.

مراحل بالا را تکرار کنید اما این بار نماد پیکان رو به پایین را انتخاب کنید و آن را به نام “ic_count_down.”

هر بار که کاربر افزایش یا کاهش ارزش یک تکه به روز رسانی که زمان اجرا

، ما می داند ما قطعه مورد آن باید مطمئن شوید!

برای یک تکه اطلاع رسانی درباره تغییرات برنامه ما باید تماس بگیرید چهار چوب. getResolver. notifyChange (Uri, پوچ) onBindSlice () روش را آغاز و باعث تکه را بازسازی باشد با مطالب جدید.

 واردات اندیشه. عامل. بسته نرم افزاری;
اندیشه. محتوای. زمینه واردات;
اندیشه. ویدجت. TextView واردات;
اندیشه. خالص. نوع واردات;
اندیشه. مشاهده. مشاهده واردات;

androidx. appcompat. حدود AppCompatActivity وارد کردن;
androidx. مشخصه. NonNull واردات;

کلاس های عمومی MainActivity گسترش AppCompatActivity پیاده OnClickListener {مشاهده اعضای هیات استاتیک عمومی clickCount = 0؛

   mTextView TextView خصوصی;

   @Override حفاظت شده onCreate خالی (بسته نرم افزاری savedInstanceState) {onCreate super. (savedInstanceState);
       setContentView (رضا چیدمان. activity_main);

       mTextView = findViewById (رضا شناسه click_count);

       findViewById (رضا شناسه افزایش). setOnClickListener (این);
       findViewById (رضا شناسه کاهش). setOnClickListener (این);
   } @Override عمومی خالی onClick (مشاهده مشاهده) {هیات شناسه شماره = مشاهده. getId ()؛
       سوئیچ (شناسه) {رضا increase://Increase شناسه ارزش مورد / / updateClickCount (getApplicationContext () clickCount + 1)؛
               شکستن;
           مورد decrease://Decrease رضا شناسه ارزش / / updateClickCount (getApplicationContext (), clickCount-1)؛
               شکستن;
       } mTextView. setText (getClickString (getApplicationContext ()));
   } عمومی استاتیک رشته getClickString (چهار چوب چهار چوب @NonNull) {بازگشت مضمون. getString (R. click_string، clickCount)؛
   } عمومی updateClickCount خالی استاتیک (چهار چوب چهار چوب، اعضای هیات newValue) {اگر (newValue! = clickCount) {clickCount = newValue؛

بازیابی URI است که به این قطعه نقشه برداری / / نوع uri = MySliceProvider. getUri (چهار چوب، "clickCount");

مطلع قطعه مورد محتوای به روز شده / / مضمون. getContentResolver (). notifyChange (uri تهی)؛
       }}} 

ایجاد تکه چند انتخابي

در ما ارائه دهنده قطعه دوم، ما نیاز به تکمیل مراحل معمول (مانند اجرای onCreateSliceProvider و onBindSlice )، به علاوه موارد زیر: [19659018] ایجاد چند SliceActions. ما نیاز به تعریف اقدامات تکه های جداگانه برای زمانی که کاربر را افزایش می دهد ارزش و زمانی که آنها کاهش ارزش.

  • ورودی کاربر را اداره می کند. ما نیز نیاز به تعریف PendingIntent به ثبت حوادث تغییر ارزش برنامه ما. در مرحله بعد ما BroadcastReceiver امکان ایجاد دو خرید این PendingIntents .
  • برخی از موارد پایان عرضه. شما می توانید مقایسه، آیکن ها، نمایش و بریدن اقدامات در انتهای هر ردیف. من می روم به استفاده از “بالا” و “پایین” به عنوان موارد پایان من خلال بردارها.
  • MySlicePr نهایی اینجاستکلاس ovider :

     واردات اندیشه. محتوای. ContentResolver;
    اندیشه. محتوای. زمینه واردات;
    اندیشه. محتوای. قصد وارد کردن;
    واردات اندیشه. حدود PendingIntent;
    اندیشه. خالص. نوع واردات;
    
    androidx. قاچ. سازندگان. ListBuilder واردات;
    androidx. قاچ. تکه وارد;
    androidx. قاچ. سازندگان. SliceAction واردات;
    androidx. قطعه. SliceProvider واردات;
    
    واردات androidx. هسته. گرافیک. drawable. IconCompat;
    
    com. استاتیک jessicathornsby. dynamicslice. MyBroadcastReceiver. ACTION_CHANGE_COUNT واردات;
    com. استاتیک jessicathornsby. dynamicslice. MyBroadcastReceiver. EXTRA_COUNT_VALUE واردات;
    واردات com. استاتیک jessicathornsby. dynamicslice. MainActivity. getClickString;
    واردات com. استاتیک jessicathornsby. dynamicslice. MainActivity. clickCount;
    
    گسترش کلاس های عمومی MySliceProvider SliceProvider {زمینه متن؛
       تعداد اعضای هیات استاتیک خصوصی = 0؛
    
       @Override عمومی onCreateSliceProvider بولی () {متن = getContext ()؛
          بازگشت واقعی؛
       } @Override عمومی برش onBindSlice (نوع sliceUri) {نهایی مسیر رشته = sliceUri. getPath ()؛
           سوئیچ (مسیر) {//Define URI / / مورد "/ clickCount": createClickSlice (sliceUri)؛ بازگشت
           } بازگشت پوچ;
       } createClickSlice تکه های خصوصی (نوع sliceUri) {//Define دو SliceActions / / SliceAction clickUp = SliceAction جدید (getChangeCountIntent (clickCount + 1)، IconCompat-createWithResource (چهار چوب، رضا drawable. ic_count_up). toIcon () "Incre تعداد دفعات مشاهده آسه ");
           SliceAction clickDown = SliceAction جدید (getChangeCountIntent (clickCount-1)، IconCompat. createWithResource (چهار چوب، رضا drawable. ic_count_down). () toIcon "کاهش تعداد");
    
           Listbuilder listBuilder = ListBuilder جدید (متن، sliceUri)؛
           Listbuilder. RowBuilder clickRow = جدید ListBuilder. RowBuilder (listBuilder);
    
           clickRow. setTitle (getClickString (چهار چوب));
    
    اقداماتی که نمایش داده می شوند در پایان سطر اضافه کنید / / clickRow. addEndItem (clickDown);
           clickRow. addEndItem (clickUp);
    
    اضافه کردن سطر به پدر و مادر ListBuilder / / listBuilder. addRow (clickRow);
    
    ساخت تکه / / بازگشت listBuilder. ساخت ()؛
       } //Define PendingIntent است که در نهایت ما گیرنده پخش را آغاز کنید / / خصوصی getChangeCountIntent PendingIntent (دانشنامه هوشمند مقدار) {قصد قصد = جدید قصد (ACTION_CHANGE_COUNT);
           قصد. setClass (چهار چوب، MyBroadcastReceiver کلاس);
           قصد. putExtra (EXTRA_COUNT_VALUE، ارزش);
           بازگشت PendingIntent-getBroadcast (getContext ()، تعداد دفعات مشاهده ++، قصد، / / اگر PendingIntent در حال حاضر وجود دارد، سپس آن را با داده های جدید بروز / / PendingIntent-FLAG_UPDATE_CURRENT);
       } عمومی استاتیک Uri getUri (چهار چوب چهار چوب، مسیر رشته) {جدید () نوع ساز بازگشت. طرح (ContentResolver. SCHEME_CONTENT). قدرت (چهار چوب. getPackageName ()). appendPath (مسیر). ساخت ()؛
       }} 

    عمل تکه مفاهیم

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

    • پروژه شما “src” پوشه جدید را انتخاب کنید و > دیگر > پخش گیرنده .
    • نام “MyBroadcastReceiver” را وارد کنید و سپس روی پایان کلیک کنید.
    • شما MyBroadcastReceiver فایل را باز کرده و اضافه کردن زیر:
     واردات اندیشه. محتوای. BroadcastReceiver;
    اندیشه. محتوای. زمینه واردات;
    اندیشه. محتوای. قصد وارد کردن;
    
    واردات com. استاتیک jessicathornsby. dynamicslice. MainActivity. clickCount;
    واردات com. استاتیک jessicathornsby. dynamicslice. MainActivity. updateClickCount;
    
    کلاس های عمومی MyBroadcastReceiver گسترش BroadcastReceiver {عمومی استاتیک رشته ACTION_CHANGE_COUNT = "بازرگاني jessicathornsby. slicetesting. ACTION_CHANGE_COUNT";
       عمومی استاتیک رشته EXTRA_COUNT_VALUE = "بازرگاني jessicathornsby. slicetesting. EXTRA_COUNT_VALUE";
    
       @Override خالی onReceive عمومی (چهار چوب چهار چوب، قصد قصد) {رشته اقدام = قصد. getAction ()؛
    
           اگر (ACTION_CHANGE_COUNT. (عمل) برابر && قصد. getExtras ()! = تهی) {//Retrieve مقدار جدید / / اعضای هیات newValue قصد. getExtras () =. getInt (EXTRA_COUNT_VALUE، clickCount)؛
               updateClickCount (چهار چوب، newValue)؛
           }}} 

    را برش خود را پویا به test دو test

    این تکه، شما نیاز به ایجاد پیکربندی اجرای دوم است که این برش خاص نوع منحصر به فرد: انتخاب

    • اجرای > ویرایش تنظیمات را از اندیشه نوار ابزار استودیو.
    • کلیک بر روی آیکون کوچک “+” و “اندیشه App.” را انتخاب کنید
    • این پیکربندی نام می دهد.
    • باز کردن کشویی “راه اندازی” و سپس “آدرس” را انتخاب کنید
    • URI برای راه اندازی این قطعه را وارد کنید. من با استفاده از موارد زیر: تکه content://com.jessicathornsby.dynamicslice/clickCount
    • “خوب.” را کلیک کنید
    • را انتخاب کنید اجرای > تکه را از نوار ابزار اندیشه استودیو اجرا.

    برش خود را در حال حاضر در تالار و یا دستگاه های آندروید متصل ظاهر می شود.

    برای قرار دادن این قطعه به test, از دست دادن آن “تا” و “پایین” فلش و تبدیل به درخواست شما MainActivity . از دست دادن هر کدام از دکمه “افزایش” یا “کاهش” برنامه، و باید شروع به شمارش از مقدار ایجاد شده به تکه و نه از صفر. اگر شما به تکه، شما باید پیدا کنید ارزش به طور خودکار به روز است.

    دانلود پروژه کامل از GitHub.

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

    . برش در پروژه های آندروید خود استفاده خواهید کرد؟ ما در نظرات زیر می دانم!