মানচিত্র আঁকুন

নিম্নলিখিত টেমপ্লেটগুলি ব্যবহার করে নেভিগেশন, আগ্রহের স্থান (POI) এবং আবহাওয়ার অ্যাপগুলি একটি Surface অ্যাক্সেস করে মানচিত্র আঁকতে পারে।

নিম্নলিখিত টেমপ্লেটগুলি ব্যবহার করার জন্য, আপনার অ্যাপটিকে AndroidManifest.xml ফাইলের একটি <uses-permission> উপাদানে এই সংশ্লিষ্ট অনুমতিগুলির মধ্যে একটি ঘোষণা করতে হবে।

টেমপ্লেট অনুমতি নির্দেশনা
NavigationTemplate androidx.car.app.NAVIGATION_TEMPLATES ন্যাভিগেশন
MapWithContentTemplate

androidx.car.app.NAVIGATION_TEMPLATES

অথবা,

androidx.car.app.MAP_TEMPLATES

নেভিগেশন , পিওআই , আবহাওয়া

MapTemplate

( অবঞ্চিত )

androidx.car.app.NAVIGATION_TEMPLATES ন্যাভিগেশন

PlaceListNavigationTemplate

( অবঞ্চিত )

androidx.car.app.NAVIGATION_TEMPLATES ন্যাভিগেশন

RoutePreviewNavigationTemplate

( অবঞ্চিত )

androidx.car.app.NAVIGATION_TEMPLATES ন্যাভিগেশন

রেফারেন্স বাস্তবায়ন দেখুন

সম্পূর্ণ রেফারেন্স বাস্তবায়ন দেখতে, নেভিগেশন নমুনা দেখুন।

পৃষ্ঠের অনুমতি ঘোষণা করুন

আপনার অ্যাপ যে টেমপ্লেটটি ব্যবহার করছে তার জন্য প্রয়োজনীয় অনুমতি ছাড়াও, আপনার অ্যাপটিকে পৃষ্ঠায় অ্যাক্সেস পেতে তার AndroidManifest.xml ফাইলে androidx.car.app.ACCESS_SURFACE অনুমতি ঘোষণা করতে হবে:

<manifest ...>
  ...
  <uses-permission android:name="androidx.car.app.ACCESS_SURFACE" />
  ...
</manifest>

পৃষ্ঠে প্রবেশ করুন

হোস্ট যে Surface প্রদান করে তা অ্যাক্সেস করতে, আপনাকে একটি SurfaceCallback বাস্তবায়ন করতে হবে এবং AppManager কার পরিষেবাতে সেই বাস্তবায়ন প্রদান করতে হবে। বর্তমান Surface onSurfaceAvailable() এবং onSurfaceDestroyed() কলব্যাকের SurfaceContainer প্যারামিটারে আপনার SurfaceCallback এ প্রেরণ করা হয়।

কোটলিন

carContext.getCarService(AppManager::class.java).setSurfaceCallback(surfaceCallback)

জাভা

carContext.getCarService(AppManager.class).setSurfaceCallback(surfaceCallback);

কন্টেন্ট রেন্ডার করার জন্য একটি ভার্চুয়াল ডিসপ্লে ব্যবহার করুন

Canvas এপিআই ব্যবহার করে সরাসরি Surface রেন্ডার করার পাশাপাশি, আপনি VirtualDisplay এবং Presentation এপিআই ব্যবহার করে Surface ভিউ রেন্ডার করতে পারেন, যেমনটি এই উদাহরণে দেখানো হয়েছে:

class HelloWorldSurfaceCallback(context: Context) : SurfaceCallback {
  lateinit var virtualDisplay: VirtualDisplay
  lateinit var presentation: Presentation

  override fun onSurfaceAvailable(surfaceContainer: SurfaceContainer) {
      virtualDisplay = context
          .getSystemService(DisplayManager::class.java)
          .createVirtualDisplay(
              VIRTUAL_DISPLAY_NAME ,
              surfaceContainer.width,
              surfaceContainer.height,
              surfaceContainer.dpi,
              surfaceContainer.surface,
              0
          )

      presentation = Presentation(context, virtualDisplay.display)

      // Instantiate the view to be used as the content view
      val view = ...

      presentation.setContentView(view)
      presentation.show()
  }

  override fun onSurfaceDestroyed(surfaceContainer: SurfaceContainer) {
    presentation.dismiss()
    // This handles releasing the Surface provided when creating the VirtualDisplay
    virtualDisplay.release()
  }
}

ভার্চুয়াল ডিসপ্লেতে রেন্ডার করতে কম্পোজ ব্যবহার করুন

আপনি Presentation এর কন্টেন্ট ভিউ হিসেবে ComposeView ব্যবহার করতে পারেন। যেহেতু ComposeView একটি অ্যাক্টিভিটির বাইরে ব্যবহৃত হয়, তাই নিশ্চিত করুন যে এটি বা একটি প্যারেন্ট ভিউ একটি LifecycleOwner এবং SavedStateRegistryOwner প্রচার করে। এটি করার জন্য, setViewTreeLifecycleOwner এবং setViewTreeSavedStateRegistryOwner ব্যবহার করুন।

Session ইতিমধ্যেই LifecycleOwner প্রয়োগ করছে। উভয় ভূমিকা পালন করার জন্য, আপনার বাস্তবায়ন অতিরিক্তভাবে SavedStateRegistryOwner প্রয়োগ করতে পারে।

class HelloWorldSession() : Session(), SavedStateRegistryOwner { ... }

class HelloWorldSurfaceCallback(session: HelloWorldSession) : SurfaceCallback {
  ...

  override fun onSurfaceAvailable(surfaceContainer: SurfaceContainer) {
    ...
    val view = ComposeView(session.carContext)
    view.setViewTreeLifecycleOwner(session)
    view.setViewTreeSavedStateRegistryOwner(session)
    view.setContent {
      // Composable content
    }

    presentation.setContentView(view)
    presentation.show()
  }

  ...
}

দৃশ্যমান পৃষ্ঠতলের ক্ষেত্রফল বুঝুন

হোস্ট ম্যাপের উপরে টেমপ্লেটগুলির জন্য ইউজার ইন্টারফেস উপাদান আঁকতে পারে। হোস্ট SurfaceCallback.onVisibleAreaChanged পদ্ধতিটি ব্যবহার করে পৃষ্ঠের ক্ষেত্রফল নির্ধারণ করে যা ব্যবহারকারীর কাছে বাধামুক্ত এবং দৃশ্যমান হওয়ার সম্ভাবনা সবচেয়ে বেশি।

পরিবর্তনের সংখ্যা কমাতে, হোস্ট SurfaceCallback.onStableAreaChanged পদ্ধতিটি সবচেয়ে ছোট আয়তক্ষেত্র দিয়ে কল করে, যা বর্তমান টেমপ্লেট অনুসারে সর্বদা দৃশ্যমান।

উদাহরণস্বরূপ, যখন একটি নেভিগেশন অ্যাপ NavigationTemplate ব্যবহার করে যার উপরে একটি অ্যাকশন স্ট্রিপ থাকে, তখন স্ক্রিনে আরও জায়গা তৈরি করার জন্য ব্যবহারকারী যখন স্ক্রিনের সাথে ইন্টারঅ্যাক্ট করেন না তখন অ্যাকশন স্ট্রিপটি লুকিয়ে রাখা যেতে পারে। এই ক্ষেত্রে, একই আয়তক্ষেত্র দিয়ে onStableAreaChanged এবং onVisibleAreaChanged এ কলব্যাক করা হয়।

যখন অ্যাকশন স্ট্রিপটি গোপন করা হয়, তখন শুধুমাত্র বৃহত্তর এলাকা সহ onVisibleAreaChanged ডাকা হয়। যদি ব্যবহারকারী স্ক্রিনের সাথে ইন্টারঅ্যাক্ট করে, তাহলে শুধুমাত্র প্রথম আয়তক্ষেত্র সহ onVisibleAreaChanged ডাকা হয়।

ডার্ক থিম সমর্থন করুন

হোস্ট যখন শর্তাবলী নিশ্চিত করে যে গাড়ির জন্য অ্যান্ড্রয়েড অ্যাপ কোয়ালিটিতে বর্ণিত হয়েছে, তখন অ্যাপগুলিকে অবশ্যই সঠিক গাঢ় রঙের সাথে Surface ইনস্ট্যান্সে তাদের মানচিত্র পুনরায় আঁকতে হবে।

একটি অন্ধকার মানচিত্র আঁকতে, CarContext.isDarkMode পদ্ধতিটি ব্যবহার করুন। যখন অন্ধকার থিমের অবস্থা পরিবর্তন হয়, তখন আপনি Session.onCarConfigurationChanged এ একটি কল পাবেন।

ক্লাস্টার ডিসপ্লেতে মানচিত্র আঁকুন

প্রধান ডিসপ্লেতে মানচিত্র আঁকার পাশাপাশি, নেভিগেশন অ্যাপগুলি স্টিয়ারিং হুইলের পিছনে থাকা ক্লাস্টার ডিসপ্লেতে মানচিত্র আঁকার সুবিধাও প্রদান করতে পারে। আরও জানতে, ক্লাস্টার ডিসপ্লেতে অঙ্কন দেখুন।