بررسی اجمالی ویژگی ها و API ها در اندروید 12

اندروید 12 ویژگی ها و API های جدید بسیار خوبی را برای توسعه دهندگان ارائه می دهد. بخش های زیر به شما کمک می کند تا از ویژگی های برنامه های خود مطلع شوید و با API های مربوطه شروع به کار کنید.

تجربه های جدید

حالت بازی

API مخصوص بازی و مداخلات حالت بازی به شما امکان می دهد با اولویت بندی ویژگی ها، مانند عملکرد یا عمر باتری بر اساس تنظیمات کاربران یا تنظیمات خاص بازی، گیم پلی را بهینه کنید.

برای اطلاعات بیشتر در این خصوص، به مقاله  Game Mode مراجعه کنید.

AppSearch

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

AppSearch دارای دو flavors است: یک فهرست محلی برای استفاده برنامه شما که با نسخه های قدیمی تر Android سازگار است یا یک شاخص مرکزی برای کل سیستم در Android 12می باشد با استفاده از فهرست مرکزی، برنامه شما می تواند اجازه دهد داده های در UI سیستم توسط جزء هوشمند از پیش نصب شده سیستم نمایش داده شوند. این که دقیقاً چه داده هایی روی سطوح UI سیستم نمایش داده می شود، به OEM بستگی دارد. علاوه بر این، برنامه شما می تواند داده ها را به طور ایمن با سایر برنامه ها به اشتراک بگذارد تا به آنها امکان جستجو در این داده ها را نیز بدهد.

در راهنمای برنامه نویس درباره AppSearch بیشتر بدانید و استفاده از آن را با کتابخانه AppSearch Jetpack شروع کنید، که سطح API سازگار با توسعه دهندگان و همچنین پشتیبانی از پردازنده حاشیه نویسی را ارائه می دهد.

Widgets improvements

Android 12 برای بهبود کاربر و توسعه تجربه در سیستم عامل و راه اندازها، API موجود Widgets را اصلاح کرده است.  برای اطلاعات بیشتر به مقاله بهبود ابزارک های Android 12 مراجعه کنید.

Audio-coupled haptic effect

برنامه های اندروید 12 می توانند بازخورد لمسی حاصل از یک جلسه صوتی را با استفاده از لرزاننده تلفن ایجاد کنند. این فرصتی را برای بازیهای جذاب و تجربیات صوتی فراهم می کند. به عنوان مثال، آهنگ های زنگ haptic-enhanced می توانند به شناسایی تماس گیرنده کمک کنند، یا یک بازی رانندگی می تواند احساس ناهمواری زمین را شبیه سازی کند.

Splash screen API

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

اعلان های تماس تلفنی جدید اجازه می دهد اهمیت تماس های دریافتی رتبه بندی شود

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

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

کد زیر را برای انواع تماس ها پیاده سازی کنید.

// Create a new call with the user as caller.
val incoming_caller = Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build()
// Create a new call with the user as caller.
Person incoming_caller = new Person.Builder()
    .setName("Jane Doe")
    .setImportant(true)
    .build();

برای ایجاد یک اعلان سبک تماس برای تماس ورودی از () forInomingCall استفاده کنید.

// Create a call style notification for an incoming call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller)
// Create a call style notification for an incoming call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forIncomingCall(caller, declineIntent, answerIntent))
    .addPerson(incoming_caller);

برای ایجاد یک اعلان سبک تماس برای یک تماس مداوم از () forOngoingCall استفاده کنید.

// Create a call style notification for an ongoing call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller)
// Create a call style notification for an ongoing call.
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forOnGoingCall(caller, hangupIntent))
    .addPerson(second_caller);

برای ایجاد یک اعلان سبک تماس برای غربالگری تماس ، از() forScreeningCall  استفاده کنید.

// Create a call style notification for screening a call.
val builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
         Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller)
Notification.Builder builder = Notification.Builder(context, CHANNEL_ID)
    .setContentIntent(contentIntent)
    .setSmallIcon(smallIcon)
    .setStyle(
        Notification.CallStyle.forScreeningCall(caller, hangupIntent, answerIntent))
    .addPerson(second_caller);

پشتیبانی از تصویر غنی شده برای اعلان ها

د Android 12، اکنون می توانید با ارائه تصاویر متحرک در اعلان های MessagingStyle () و BigPictureStyle () تجربه اعلان برنامه خود را غنی کنید. همچنین، برنامه شما اکنون می تواند کاربران را قادر به ارسال پیام های تصویری هنگام پاسخ دادن به پیام ها از سایه اعلان ها کند.

Rounded corner APIs

اندروید 12 RoundedCorner  و WindowInsets.getRoundedCorner(int position)را معرفی می کند که شعاع و نقطه مرکزی Rounded corner را فراهم می کند. با استفاده از این API ها، برنامه شما می تواند از بریده شدن عناصر UI در صفحه های دارای گوشه های گرد جلوگیری کند.

این API ها وقتی در برنامه شما پیاده سازی می شوند ، هیچ تأثیری روی دستگاه هایی با صفحه نمایش غیر گرد ندارند.

برای اجرای این ویژگی، اطلاعات RoundedCorner را از طریق  WindowInsets.getRoundedCorner(int position) نسبت به مرزهای برنامه دریافت کنید. اگر برنامه کل صفحه را اشغال نکند، API با قرار دادن نقطه مرکزی گوشه گرد در مرزهای پنجره برنامه، گوشه گرد را اعمال می کند.

قطعه کد زیر یک مثال ساده را برای یک برنامه نشان می دهد تا از تنظیمات UI با تنظیم حاشیه نمای بر اساس اطلاعات RoundedCorner جلوگیری کند. در این حالت گوشه بالا سمت راست  گرد است.

// Get the top-right rounded corner from WindowInsets.
final WindowInsets insets = getRootWindowInsets();
final RoundedCorner topRight = insets.getRoundedCorner(POSITION_TOP_RIGHT);
if (topRight == null) {
   return;
}

// Get the location of the close button in window coordinates.
int [] location = new int[2];
closeButton.getLocationInWindow(location);
final int buttonRightInWindow = location[0] + closeButton.getWidth();
final int buttonTopInWindow = location[1];

// Find the point on the quarter circle with a 45 degree angle.
final int offset = (int) (topRight.getRadius() * Math.sin(Math.toRadians(45)));
final int topBoundary = topRight.getCenter().y - offset;
final int rightBoundary = topRight.getCenter().x + offset;

// Check whether the close button exceeds the boundary.
if (buttonRightInWindow < rightBoundary && buttonTopInWindow > topBoundary) {
   return;
}

// Set the margin to avoid truncating.
int [] parentLocation = new int[2];
getLocationInWindow(parentLocation);
FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) closeButton.getLayoutParams();
lp.rightMargin = Math.max(buttonRightInWindow - rightBoundary, 0);
lp.topMargin = Math.max(topBoundary - buttonTopInWindow, 0);
closeButton.setLayoutParams(lp);

بهبودهای Picture in Picture (PiP)

اندروید 12 ویژگی های جدیدی را برای حالت تصویر در تصویر (PiP) معرفی می کند. برای اطلاعات بیشتر به مقاله بهبودهای تصویر در تصویر مراجعه کنید.

بهبودهای حالت غوطه وری برای پیمایش اشاره

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

برای ایجاد این امکان، رفتارهای موجود برای تجربه های non-sticky (BEHAVIOR_SHOW_BARS_BY_TOUCH ، BEHAVIOR_SHOW_BARS_BY_SWIPE) از Android 12 منسوخ خواهند شد و  با رفتار پیش فرض (BEHAVIOR_DEFAULT) جایگزین خواهند شد که هنگام پنهان کردن سیستم با حرکات کششی امکان حرکت را فراهم می کند. این flag بسته به حالت رفتار بصری و عملکردی مختلفی از خود نشان می دهد:

  • در حالت سه دکمه، رفتار بصری و عملکردی همان حالت immersive در نسخه های Android قبل از 12 است.
  • در حالت ناوبری حرکتی، رفتار به شرح زیر است:
    • از نظر بصری، همان حالت غوطه وری در Android 11 و پایین تر است.
    • از نظر عملکردی، حرکات حتی در صورت پنهان بودن نوار مجاز است. برای برگشت سیستم فقط به یک swipes به جای دو swipes مورد نیاز برای Android 11 احتیاج دارید. برای کشیدن نوار اعلان یا شروع رفتن به خانه، نیازی به swipes نیست.

حالت غوطه وری مهم (BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE) برای Android 12 تغییر نکرده است ، به backward-compatibility زیر برای این ویژگی توجه داشته باشید:

  • برای برنامه هایی که روی Android 12 اجرا می شوند و Android 11 و پایین تر را هدف قرار می دهند:
    • BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE عملکردی و بصری یکسان دارد.
    • به صورت پیش فرض BEHAVIOR_SHOW_BARS_BY_SWIPE ترسیم شده است.
  • برای برنامه های دارای Android 11 (API level 30) و پایین تر که Android 12 را هدف قرار می دهند:
    • رفتار مشابه انتظار می رود ، به جز BEHAVIOR_SHOW_BARS_BY_TOUCH به BEHAVIOR_SHOW_BARS_BY_SWIPE ترسیم شده است.
    • برای داشتن پیش فرض جدید مطمئن شوید، سطح SDK به روز شده است. (BEHAVIOR SHOW BARS_BY_SWIPE). در غیر این صورت، BEHAVIOR SHOW_BARS_BY_TOUCH به عنوان پیش فرض باقی می ماند.

Rich content insertion

Android 12 یک API یکپارچه جدید را معرفی می کند که به شما امکان می دهد محتوای غنی را از هر منبع موجود دریافت کنید: clipboard ، صفحه کلید یا drag and drop.

اشتراک URL

کاربران اکنون می توانند پیوندهایی را که اخیراً مشاهده شده اند مستقیماً از صفحه Recents به اشتراک بگذارند. پس از بازدید از محتوا در یک برنامه، کاربران انگشت خود را برای پیدا کردن برنامه محل مشاهده محتوا بکشید، سپس روی دکمه پیوند ضربه بزنید تا URL را کپی یا به اشتراک بگذارید. هر برنامه ای می تواند با ارائه UI وب و overpring onProvideAssistContent() ، پیوند Recents را برای کاربران فعال کند، همانطور که در مثال زیر نشان داده شده است.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    public void onProvideAssistContent(AssistContent outContent) {
        super.onProvideAssistContent(outContent);

        outContent.setWebUri(Uri.parse("https://example.com/myCurrentPage"));
    }
}

دوربین

پشتیبانی از سنسور دوربین Quad bayer

امروزه بسیاری از دستگاه های اندرویدی با سنسورهای دوربین با وضوح فوق العاده بالا، معمولاً با الگوهای Quad / Nona Bayer عرضه می شوند و اینها از نظر کیفیت تصویر و عملکرد در نور کم انعطاف پذیری بالایی دارند. اندروید 12 API های پلتفرم جدیدی را معرفی می کند که به برنامه های شخص ثالث امکان استفاده کامل از این سنسورهای همه کاره را می دهد. API های جدید رفتار منحصر به فرد این سنسورها را پشتیبانی می کنند و در نظر می گیرند که هنگام کار در وضوح کامل یا حالت “حداکثر وضوح” در مقابل حالت “پیش فرض” ، ممکن است از تنظیمات و ترکیبات مختلف جریان پشتیبانی کنند.

گرافیک و تصاویر

دسترسی مستقیم برنامه ها به tombstone traces را برای برنامه ها فراهم کنید

با شروع Android 12، می توانید از طریق ApplicationExitInfo.getTraceInputStream() به tombstone traces خرابی بومی برنامه خود به عنوان یک بافر پروتکل دسترسی پیدا کنید. بافر پروتکل با استفاده از این طرح به صورت سریال انجام شود. پیش از این، تنها راه دسترسی به این اطلاعات از طریق  Android Debug Bridge (adb) بود.

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

ActivityManager activityManager: ActivityManager = getSystemService(Context.ACTIVITY_SERVICE);
MutableList<ApplicationExitInfo> exitReasons = activityManager.getHistoricalProcessExitReasons(/* packageName = */ null, /* pid = */ 0, /* maxNum = */ 5);
for ( ApplicationExitInfo aei: exitReasons ) {
    if ( aei.getReason() == REASON_CRASH_NATIVE ) {
        // Get the tombstone input stream.
        InputStream tombstoneInputStream = aei.getTraceInputStream();
        // The tombstone parser built with protoc uses the tombstone schema, then parses the trace.
        Tombstone tombstone = Tombstone.parseFrom(trace);
    }
}

پشتیبانی از تصویر AVIF

اندروید 12 پشتیبانی از تصاویری را که از AV1 Image File Format (AVIF) استفاده می کنند، معرفی می کند. AVIF یک قالب ظرف برای تصاویر و توالی تصاویر رمزگذاری شده با استفاده از AV1 است. این از محتوای رمزگذاری شده درون قاب از طریق فشرده سازی فیلم بهره می برد. این در مقایسه با فرمت های تصویر قدیمی تر، مانند JPEG ، کیفیت تصویر را برای همان اندازه پرونده به طرز چشمگیری بهبود می بخشد.

تاری  فیلترهای رنگی و سایر جلوه های راحت تر

اندروید 12 RenderEffect جدید را اضافه می کند که جلوه های گرافیکی متداول مانند تاری، فیلترهای رنگ، جلوه های سایه اندروید و موارد دیگر را به سلسله مراتب Views را ارائه و اعمال می کند. اثرات می توانند به صورت اثرات زنجیره ای (که یک اثر درونی و بیرونی را تشکیل می دهند) یا اثرات ترکیبی، ترکیب شوند. دستگاه های مختلف اندرویدی ممکن است به دلیل محدود بودن قدرت پردازش، از این ویژگی پشتیبانی کنند یا نکنند.

جلوه ها را می توان در RenderNode for Views با تماس با View.setRenderEffect (RenderEffect) نیز اعمال کرد.

برای پیاده سازی RenderEffect از کد زیر استفاده کنید:

view.setRenderEffect(RenderEffect.createBlurEffect(radiusX, radiusY, SHADER_TILE_MODE))

Native animated image decoding

در Android 12 ، NDK ImageDecoder API گسترش یافته است تا تمام فریم ها و داده های زمان بندی را از تصاویر استفاده شده از GIF متحرک و قالب های متحرک WebP استفاده کند. این API هنگامی که در اندروید 11 معرفی شد، فقط اولین تصویر از انیمیشن ها را در این قالب ها رمزگشایی می کرد.

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

رسانه ها

کدگذاری رسانه سازگار

Android 12 می تواند فیلم های ضبط شده روی دستگاه HEVC(H.265) and HDR (HDR10 and HDR10+)  را به صورت خودکار به AVC (H.264) تبدیل کند، قالبی که کاملاً با پخش کننده های استاندارد سازگار است. این از رمزگذارهای مدرن در دسترس است بدون اینکه سازگاری با برنامه های قدیمی را از بین ببرد.

Performance class

با شروع Android 12، اندروید استانداردی به نام Performance class را معرفی می کند. که قابلیت های سخت افزاری فراتر از نیازهای پایه Android را مشخص می کند. هر دستگاه Android کلاس عملکردی را که پشتیبانی می کند اعلام می کند. توسعه دهندگان می توانند کلاس عملکرد دستگاه را در زمان اجرا بررسی کنند و تجربیات پیشرفته ای را ارائه دهند که از قابلیت های دستگاه کاملاً استفاده می کند.

پیشرفت های رمزگذاری ویدئو

اندروید 12 مجموعه ای استاندارد از کلیدها را برای کنترل مقدار پارامتر کمیت (QP) برای رمزگذاری ویدیو تعریف می کند و به توسعه دهندگان اجازه می دهد از کد مخصوص فروشنده جلوگیری کنند.

کلیدهای جدید در MediaFormat API و همچنین در کتابخانه NDK Media موجود است.

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

تمرکز صوتی

وقتی با Android 12 کار می کنید، وقتی برنامه ای تمرکز صوتی را درخواست می کند در حالی که برنامه دیگری راه اندازی شده و در حال پخش است، این چارچوب برنامه پخش شده را محو می کند.

به روز رسانی MediaDrm

برای تعیین اینکه آیا یک مولفه رمزگشای امن با API های فعلی MediaDrm مورد نیاز است، باید مراحل زیر را انجام دهید:

  • یک MediaDrm ایجاد کنید.
  • برای بدست آوردن شناسه session یک session را باز کنید.
  • با استفاده از شناسه جلسه MediaCrypto ایجاد کنید.
  • با requiresSecureDecoderComponent (mimeType) تماس بگیرید.

با استفاده از روش های جدید، requiresSecureDecoder(@NonNull String mime) و requiresSecureDecoder(@NonNull String mime, @SecurityLevel int level)، می توانید به محض ایجاد MediaDrm ، این مورد را تعیین کنید.

امنیت و حریم خصوصی

مجوزهای بلوتوث

Android 12 مجوزهای BLUETOOTH_SCAN ، BLUETOOTH_ADVERTISE و BLUETOOTH_CONNECT را معرفی می کند. این مجوزها تعامل با دستگاه های بلوتوث را برای برنامه هایی که Android 12 را هدف قرار می دهند آسان می کند، خصوصاً برای برنامه هایی که نیازی به دسترسی به مکان دستگاه ندارند.

توجه: مدیر دستگاه همراه روش ساده تری برای اتصال به دستگاه های همراه ارائه می دهد. این سیستم رابط کاربری جفت سازی را از طرف برنامه شما فراهم می کند. اگر می خواهید کنترل بیشتری بر تجربه اتصال و اتصال داشته باشید، از مجوزهای جدید بلوتوث استفاده کنید.

Privacy Dashboard

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

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

برای توضیح اینکه چرا برنامه شما به مکان، دوربین و میکروفون دسترسی دارد، مراحل زیر را انجام دهید:

  1. فعالیتی را اضافه کنید که با شروع آن دلیل منطقی برای اینکه چرا برنامه شما نوع خاصی از عملکرد دسترسی به داده را انجام می دهد، فراهم کنید.
  2. اگر برنامه شما آندروید 12 یا بالاتر را هدف قرار داده است، باید به صراحت مقداری را برای ویژگی android: exported تعریف کنید.

فیلتر intent زیر را به فعالیت تازه اضافه شده اضافه کنید:

<!-- android:exported required if you target Android 12. -->
<activity android:name=".DataAccessRationaleActivity"
          android:permission="android.permission.START_VIEW_PERMISSION_USAGE"
          android:exported="true">
       <!-- VIEW_PERMISSION_USAGE shows a selectable information icon on
            your app permission's page in system settings.
            VIEW_PERMISSION_USAGE_FOR_PERIOD shows a selectable information
            icon on the Privacy Dashboard screen. -->
    <intent-filter
       android:action="android.intent.action.VIEW_PERMISSION_USAGE"
       android:action="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD" ... >
    </intent-filter>
</activity>
  1. تصمیم بگیرید که چه فعالیت منطقی دسترسی به داده شما را باید نشان دهد. به عنوان مثال، ممکن است وب سایت برنامه خود یا مقاله مرکز راهنمایی را نشان دهید. برای ارائه توضیحات دقیق تر در مورد انواع داده هایی که برنامه شما به آنها دسترسی دارد و همچنین در مورد زمان دسترسی، موارد اضافی را که سیستم هنگام استفاده اجازه دسترسی را دارد را مشخص کنید:

 

  • اگر سیستم ACTION_VIEW_PERMISSION_USAGE را فراخوانی کند، برنامه شما می تواند مقداری را برای EXTRA_PERMISSION_GROUP_NAME بازیابی کند.
  • اگر سیستم ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD را فراخوانی کند، برنامه شما می تواند مقادیر EXTRA_PERMISSION_GROUP_NAME ، EXTRA_ATTRIBUTION_TAGS ، EXTRA_START_TIME و EXTRA_END_TIME را بازیابی کند.

بسته به اینکه کدام فیلترهای را اضافه می کنید، کاربران در صفحه خاصی با یک نماد اطلاعات در کنار نام برنامه شما روبرو می شوند:

  • اگر فیلتر intent را که حاوی عملکرد VIEW_PERMISSION_USAGE است اضافه کنید، کاربران در تنظیمات سیستم نماد صفحه مجوزهای برنامه شما را مشاهده می کنند.
  • اگر فیلتر intent را که حاوی عملکرد VIEW_PERMISSION_USAGE_FOR_PERIOD است اضافه کنید، کاربران هر زمان که برنامه شما در صفحه داشبورد حریم خصوصی ظاهر می شود، نماد نام برنامه شما را مشاهده می کنند.

وقتی کاربران آن نماد را انتخاب می کنند فعالیت منطقی برنامه شما شروع می شود.

Permission group lookup

در Android 12،شما می توانید  نحوه سازماندهی مجوزهای ارائه شده توسط پلت فرم را به گروه های مجاز از سیستم جستجو کنید:

  • برای تعیین گروه مجاز که سیستم دارای مجوز تعریف شده توسط پلتفرم است، با getGroupOfPlatformPermission () تماس بگیرید.
  • برای تعیین مجوزهای تعریف شده توسط پلت فرم که سیستم در یک گروه مجوز خاص قرار داده است، با getPlatformPermissionsForGroup () تماس بگیرید.

توجه: یکی از اصول اساسی استفاده از مجوزهای اندروید عدم در نظر گرفتن رفتار سیستم است. تصور نکنید که مجوز خاصی در یک گروه خاص است. در عوض ، از API های توضیح داده شده در این بخش استفاده کنید.

پنهان کردن پنجره های همپوشانی برنامه

برای کنترل بیشتر برنامه نویسان در مورد آنچه که کاربران هنگام تعامل با برنامه توسعه دهنده می بینند، Android 12 توانایی پنهان کردن پنجره های همپوشانی را که توسط برنامه هایی که دارای اجازه SYSTEM_ALERT_WINDOW هستند ترسیم می کند، معرفی می کند.

پس از اعلام مجوز HIDE_OVERLAY_WINDOWS ، یک برنامه می تواند با  setHideOverlayWindows()تماس بگیرد تا نشان دهد وقتی پنجره خود برنامه قابل مشاهده است، همه پنجره های نوع TYPE_APPLICATION_OVERLAY پنهان شوند. برنامه ها ممکن است هنگام نمایش صفحه های حساس مانند جریان تأیید تراکنش، این کار را انجام دهند.

برنامه هایی که پنجره هایی از نوع TYPE_APPLICATION_OVERLAY را نشان می دهند باید گزینه هایی را که ممکن است برای موارد استفاده مناسب تر باشند مانند  picture-in-picture  یا  bubblesدر نظر بگیرند.

 

Known signers permission protection flag

اندروید 12 ویژگی شناخته شده Certs را برای مجوزهای سطح امضا معرفی می کند. این ویژگی به شما امکان می دهد تا در زمان اعلامیه به خلاصه گواهینامه های امضای شناخته شده مراجعه کنید.

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

 

flag شناخته شده SignSigner به دستگاه ها و برنامه ها اجازه می دهد بدون نیاز به امضای برنامه ها در زمان ساخت و ارسال دستگاه، به برنامه های دیگر مجوز امضا بدهند.

تأیید خصوصیات دستگاه

Android 12 expands the set of apps that can verify the device properties that are in an attestation certificate when these apps generate a new key.

از Android 9 (API level 28)، دارندگان خط مشی دستگاه (DPO) که از Keymaster 4.0 یا بالاتر استفاده می کنند، می توانند ویژگی های دستگاه را در این گواهینامه های تأیید، تأیید کنند. با شروع در Android 12 ، هر برنامه ای که Android 12 را هدف قرار دهد می تواند این تأیید را با استفاده از روش  setDevicePropertiesAttestationIncluded()انجام دهد.

خصوصیات دستگاه تولید شده شامل زمینه های Build زیر است:

  • نام تجاری
  • دستگاه
  • شرکت تولید کننده
  • مدل
  • محصول

اقدامات اعلان صفحه قفل ایمن

اندروید12 فلاگ  setAuthenticationRequired جدید را به Notification.Action.Builder اضافه می کند. این flag به شما امکان می دهد یک لایه امنیتی بیشتر به اعلان های دستگاه های قفل شده اضافه کنید.

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

برای پیاده سازی این ویژگی، setAuthenticationR Required را به یک اقدام اعلان اضافه کنید:

Notification n1 = new Notification.Builder(context, NotificationListenerVerifierActivity.TAG)
...
.addAction(new Notification.Action.Builder(R.drawable.ic_stat_charlie,
context.getString(R.string.action_test_title), makeBroadcastIntent(context))

// Make sure this notification action will always request authentication when
// invoked from a lock screen 
.setAuthenticationRequired(true).build())

.build();

قابلیت اتصال

بهبود برآورد پهنای باند

در آندروید 12 ، قابلیت تخمین پهنای باند ارائه شده توسط  getLinkDownstreamBandwidthKbps() and getLinkUpstreamBandwidthKbps()هم برای Wi-Fi و هم برای اتصال به تلفن همراه بهبود یافته است. مقادیر برگشتی اکنون نشان دهنده متوسط ​​وزن مصرفی کاربر برای هر شرکت مخابراتی یا WiFi SSID ، نوع شبکه و سطح سیگنال در تمام برنامه های موجود در دستگاه است. این می تواند تخمین دقیق تر و واقع بینانه ای از توان مورد انتظار را بازگرداند، برآوردی از شروع سرد برنامه شما ارائه دهد و در مقایسه با استفاده از سایر روش های تخمین توان، به چرخه کمتری نیاز دارد.

 

بیدار نگه داشتن برنامه های همراه

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

  • شما را قادر می سازد وقتی یک برنامه همراه در محدوده یک برنامه است، برنامه را بیدار کنید.
  • تضمین کنید که روند کار تا زمانی که دستگاه در محدوده قرار داشته باشد ادامه خواهد داشت.

برای استفاده از API ها، دستگاه های شما باید با استفاده از Companion Device Manager متصل شوند.

پیشرفت های Wi-Fi Aware (NAN)

اندروید 12 برخی از پیشرفت ها را به Wi-Fi Aware اضافه کرده است:

  • در دستگاه های دارای Android 12 و بالاتر، می توانید از تماس onServiceLost() استفاده کنید تا وقتی برنامه شما سرویس کشف شده را به دلیل توقف سرویس یا خارج شدن از محدودیت سرویس از دست داد به شما هشدار داده شود.
  • روشی که چندین مسیر داده (NAN Data Paths) تنظیم می کند در حال تغییر است تا کارآمدتر باشد. نسخه های قبلی از پیام L2 برای تبادل اطلاعات همتا مبتکران که تأخیر را ایجاد می کردند، استفاده می کردند. در دستگاه هایی که از Android 12 و بالاتر استفاده می کنند، پاسخ دهنده (سرور) می تواند به گونه ای پیکربندی شود که هر peer—that را بپذیرد – یعنی نیازی به دانستن اطلاعات آغازگر از قبل ندارد. این سرعت ارائه مسیر داده را بهبود می بخشد و چندین لینک از نقطه به نقطه را فقط با یک درخواست شبکه امکان پذیر می کند.
  • برای جلوگیری از رد درخواست های کشف یا اتصال به دلیل کمبود منابع، در دستگاه های دارای Android 12 و بالاتر، می توانید با getAvailableAwareResources() تماس بگیرید. مقدار بازگشتی این روش به شما امکان می دهد تا تعداد مسیرهای داده موجود، تعداد جلسات انتشار موجود و تعداد جلسات اشتراک موجود را بدست آورید.

اتصال به اینترنت همزمان با Peer-to-Peer+

وقتی دستگاه هایی که Android 12 و بالاتر را هدف قرار می دهند در دستگاههایی با پشتیبانی سخت افزاری کار می کنند، با استفاده از اتصالات Peer-to-peer اتصال Wi-Fi موجود شما هنگام ایجاد اتصال به دستگاه همتا قطع نمی شود. برای بررسی پشتیبانی از این ویژگی ، از  WifiManager.isMultiStaConcurrencySupported()استفاده کنید.

ذخیره سازی

اندروید 12 چندین تغییر در API مدیریت ذخیره سازی ایجاد کرده است که بخش های زیر آنها را توصیف می کند.

دایرکتوری جدید برای ضبط صدا

این سیستم فایلهای صوتی ذخیره شده در پوشه جدید Environment.DIRECTORY_RECORDINGS را به عنوان ضبط تشخیص می دهد. هنگامی که برنامه شما در فروشگاه رسانه سیستم درخواست می کند، می توانید با استفاده از flag IS_RECORDING ضبط ها را بازیابی کنید.

دسترسی به مدیریت رسانه

کاربران ممکن است برای انجام مدیریت رسانه مانند یک ویرایش مکرر روی پرونده های رسانه، به یک برنامه خاص اعتماد کنند. اگر برنامه شما Android 11 (سطح API 30) یا بالاتر را هدف قرار داده و برنامه گالری پیش فرض دستگاه نیست، باید هر بار که برنامه شما سعی در تغییر یا حذف پرونده دارد، گفتگوی تأیید را به کاربر نشان دهید.

اگر برنامه شما Android 12 را هدف قرار داده است، می توانید از کاربران بخواهید بدون نیاز به درخواست کاربر برای هر کار پرونده، به برنامه شما اجازه دهند هر یک از موارد زیر را انجام دهد:

  • با استفاده ازcreateWriteRequest() پرونده ها را اصلاح کنید.
  • با استفاده از createTrashRequest() فایلها را به سطل زباله منتقل کرده و از آنها خارج کنید.
  • با استفاده از createDeleteRequest()پرونده ها را حذف کنید.

برای انجام این کار، مراحل زیر را انجام دهید:

  1. اجازه MANAGE_MEDIA جدید و اجازه READ_EXTERNAL_STORAGE را در پرونده مانیفست برنامه خود اعلام کنید.

برای تماس با  createWriteRequest()بدون نشان دادن گفتگوی تأیید، اجازه ACCESS_MEDIA_LOCATION را نیز اعلام کنید.

  1. در برنامه خود، یک UI را به کاربر نشان دهید تا توضیح دهد که چرا ممکن است بخواهند به مدیریت شما اجازه دسترسی به برنامه شما را بدهند.
  • اقدام قصد ACTION_REQUEST_MANAGE_MEDIA را فراخوانی کنید. با این کار کاربران در تنظیمات سیستم به صفحه برنامه های مدیریت رسانه می روند. از اینجا ، کاربران می توانند به برنامه ویژه دسترسی دهند.

 

دسترسی به فضای ذخیره سازی برنامه

یک برنامه می تواند فعالیت سفارشی خود را اعلام و ایجاد کند که در صورت راه اندازی به کاربر اجازه می دهد داده هایی را که برنامه در دستگاه کاربر ذخیره کرده است، مدیریت کند. برنامه ها این فعالیت سفارشی “مدیریت فضا” را با استفاده از ویژگی android: ManageSpaceActivity در پرونده مانیفست اعلام می کنند. برنامه های مدیر پرونده می توانند این فعالیت “مدیریت فضا” را راه اندازی کنند حتی زمانی که برنامه فعالیت را صادر نمی کند. یعنی هنگامی که فعالیت android تنظیم می شود: به false صادر می شود.

در Android 12 ، برنامه هایی که هم مجوز MANAGE_EXTERNAL_STORAGE دارند و هم مجوز QUERY_ALL_PACKAGES – مانند برنامه های مدیریت فایل – می توانند از getManageSpaceActivityIntent() برای ارسال کاربران به فعالیت «مدیریت فضا» سفارشی برنامه دیگر استفاده کنند ، اگر یکی برای برنامه دیگر تعریف شده باشد .

 

متد getManageSpaceActivityIntent() یک نام بسته و یک کد درخواست دریافت می کند و یکی از موارد زیر را برمی گرداند:

  • اگر برنامه با نام بسته مشخص شده، فعالیت سفارشی “مدیریت فضا” را تعریف کرده باشد، یک PendingIntent است. برنامه ای که روش () getManageSpaceActivityIntent نامیده می شود، می تواند قصد بازگشت را فراخوانی کند تا کاربران را به فعالیت سفارشی بفرستد.
  • null ، اگر برنامه با نام بسته مشخص شده فعالیت “مدیریت فضا” را تعریف نکند.

پشتیبانی دسترسی گسترده فایل

روش  setRequireUserAction()علاوه بر پشتیبانی موجود برای URI های ExternalStorageProvider ، اکنون از URI های MediaDocumentsProvider پشتیبانی می کند. اکنون سیستم این URI ها را قبل از بازگرداندن به تماس گیرنده اعطا می کند.

علاوه بر این ، URI های رسانه ای که توسط  createWriteRequest()اعطا می شوند اکنون از API های کلاس File پشتیبانی می کنند. این API ها توانایی خواندن ، نوشتن ، تغییر نام و حذف پرونده ها را فراهم می کنند.

قابلیت های اصلی

به روزرسانی خودکار برنامه

اندروید 12 روش  setRequireUserAction() را برای برنامه هایی که از PackageInstaller API استفاده می کنند معرفی می کند. این روش به برنامه های نصب کننده این امکان را می دهد تا بدون نیاز به کاربر برای تأیید اقدام، به روزرسانی های برنامه را انجام دهند.

اطلاعات تراشه دستگاه

اندروید 12 دو ثابت به android.os اضافه می کند. ساختاری که اطلاعات فروشنده چیپست SoC و اطلاعات مدل را از طریق SDK در معرض دید قرار می دهد. با تماس با Build.SOC_MANUFACTURER و Build.SOC_MODEL می توانید این اطلاعات را بازیابی کنید.

 

دیدگاه‌ها و پرسش‌ها

برای ارسال نظر نیاز است تا ابتدا وارد سایت شوید.

هیچ نظری ارسال نشده است.

قیمت آموزش
رایگان
نوع دسترسی
رایگان

این مقاله در حال حاضر تنها به روش رایگان در دسترس می باشد.

golaleh hoseini
مدرس دوره

golaleh hoseini

مدرس دوره های سِون کلونر

گفتگوی برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن

مقالات پیشنهادی

هوش مصنوعی

هوش مصنوعی یا هوش ماشینی, به هوشمندی نشان داده شده توسط ماشین در شرایط مختلف گفته میشود که مقابل هوش طبیعی در انسان ها قرار دارد که ...


۸۶۱
۰
۱۱ آذر ۱۳۹۹

جاوا اسکریپت

جاوا اسکریپت یک زبان پویا و محبوب مبتنی بر شیء, داینامیک و مفسری می باشد. این زبان برای برنامه نویسی سمت سرور و کلاینت استفاده میشود که ...


۸۶۸
۰
۱۳ آذر ۱۳۹۹

وردپرس

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


۸۰۸
۰
۱۳ آذر ۱۳۹۹

نود جی اس

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


۹۱۲
۰
۱۲ آذر ۱۳۹۹

Fatal error: Uncaught wfWAFStorageFileException: Unable to verify temporary file contents for atomic writing. in /home/clonerco/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php:52 Stack trace: #0 /home/clonerco/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php(659): wfWAFStorageFile::atomicFilePutContents('/home/clonerco/...', '<?php exit('Acc...') #1 [internal function]: wfWAFStorageFile->saveConfig('livewaf') #2 {main} thrown in /home/clonerco/public_html/wp-content/plugins/wordfence/vendor/wordfence/wf-waf/src/lib/storage/file.php on line 52