برنامه نویسی

مرورگر پیش فرض را در سراسر سیستم عامل ها باز کنید

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

مبدل واحد CMP که روی تاشو اجرا می شود

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

در این مرحله ، برنامه دارای دو گزینه است:

  1. صفحه وب را در داخل برنامه نشان دهید
  2. اجازه دهید مرورگر پیش فرض کار خود را انجام دهد

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

آتش و فراموش کنید

مبدل واحد CMP با صفحه وب تعامل ندارد. این به یک آتش ساده متکی است و سناریو را فراموش می کند. بیایید یک ساده تعریف کنیم expect عملکرد در مشترک:

expect fun openInBrowser(url: String, 
                         completionHandler: (Boolean) -> Unit = {})
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

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

actual fun openInBrowser(url: String,
                         completionHandler: (Boolean) -> Unit) {
  NSURL.URLWithString(url)?.let {
    UIApplication.sharedApplication.openURL(
      url = it, 
      options = emptyMap<Any?, Any>(),
      completionHandler = completionHandler
    )
  }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

openURL() یک عمل ناهمزمان است. عملکرد بلافاصله برمی گردد. پس از اتمام کار ناهمزمان (یا با موفقیت یا نه) ، از کنترل کننده تکمیل استفاده می شود. options به شما امکان می دهد نحوه باز شدن URL را پیکربندی کنید. برای لیستی از کلیدهای ممکن در این نقشه ، به UIApplication.OpenExternalUrlOptionSkey مراجعه کنید

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

actual fun openInBrowser(url: String,
                         completionHandler: (Boolean) -> Unit) {
  val result = try {
    context.startActivity(
      Intent(
        Intent.ACTION_VIEW, Uri.parse(url)
      ).apply { addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) })
    true
  } catch (_: ActivityNotFoundException) {
    false
  }
  completionHandler(result)
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

از آنجا که ما نمی دانیم کدام برنامه بر روی آن واکنش نشان می دهد Intent.ACTION_VIEW، ما باید استفاده کنیم startActivity() که واقعاً معنی دارد آتش و فراموش کنیدبشر تنها کاری که می توانیم و باید انجام دهیم این است که گرفتن ActivityNotFoundExceptionبشر

سرانجام ، بیایید به دسک تاپ نگاه کنیم.

actual fun openInBrowser(url: String,
                         completionHandler: (Boolean) -> Unit) =
  browse(url = url, completionHandler = completionHandler)
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

من پرونده ای به نام خود را حفظ می کنم Desktophelpers.kt در دسکتاپین که به شدت از آن استفاده می کند java.awt.Desktopبشر متأسفانه ، این کلاس هرگز به خصوص مشهور نبوده است. این نخستین بار در تمام راه بازگشت در پلت فرم Java ، Standard Edition 6 معرفی شد و در جاوا 9 افزودنی های عمده ای دریافت کرد.

fun browse(url: String, completionHandler: (Boolean) -> Unit = {}) {
  with(Desktop.getDesktop()) {
    val result = if (isSupported(Desktop.Action.BROWSE)) {
      try {
        browse(URI.create(url))
        true
      } catch (e: IOException) {
        false
      } catch (e: SecurityException) {
        false
      }
    } else false
    completionHandler(result)
  }
}
حالت تمام صفحه را وارد کنید

از حالت تمام صفحه خارج شوید

استفاده از ویژگی های دسک تاپ همیشه از این مراحل تشکیل شده است:

  • دریافت Desktop نمونه با استفاده از Desktop.getDesktop()
  • بررسی کنید که آیا عملکرد مورد نیاز با استفاده از آن در دسترس است isSupported()
  • از عملکرد فراخوانی کنید

بنابراین ، قطعه کد در بالا فراخوانی می کند completionHandler() با true مقدار اگر Desktop.Action.BROWSE یک عمل پشتیبانی شده است و browse(URI.create(url)) استثنا نمی کند.

بسته بندی

در کنار Desktop.Action.BROWSE چند اقدام دیگر در دسترس است. به عنوان مثال ، می توانید از یک مشتری ایمیل استفاده کنید و تنظیم کنید ترجیحات، و همچنین ، در مورد دستگیرندگان ممکن است در بخش های بعدی این سری به این موضوع برگردم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا