
এমবেডেড ফটো পিকার হলো ছবি বাছাই করার একটি ভিন্ন ধরনের অভিজ্ঞতা, যা অ্যাপের ইউজার ইন্টারফেসের মধ্যেই সরাসরি ব্যবহার করা যায়। ক্লাসিক ফটো পিকারের তুলনায় এটি উন্নততর ইন্টিগ্রেশন এবং কাস্টমাইজেশনের সুযোগ দেয়। যেহেতু এটি setChildSurfacePackage মেথড ব্যবহার করে একটি SurfaceView তে রেন্ডার করা হয়, তাই এটি নন-এমবেডেড ভার্সনের মতোই নিরাপত্তা এবং গোপনীয়তার বৈশিষ্ট্যগুলো বজায় রাখে।
অন্তর্নির্মিত ফটো পিকারের সাহায্যে, ব্যবহারকারীরা ক্লায়েন্ট অ্যাপে মনোযোগ না হারিয়েই তাদের ডিভাইস এবং ক্লাউড ফটো লাইব্রেরি উভয় থেকেই ক্রমাগত ফটো ও ভিডিও নির্বাচন করতে পারেন। ক্লায়েন্ট অ্যাপটি সক্রিয় থাকে, এর কার্যক্রম পুনরায় শুরু হওয়া অবস্থায় থাকে এবং ব্যবহারকারীর নির্বাচনে রিয়েল-টাইমে সাড়া দিতে পারে।
এমবেডেড ফটো পিকারটি আরও নির্বিঘ্ন UI ইন্টিগ্রেশন প্রদান করে, কিন্তু স্ট্যান্ডার্ড ফটো পিকারের মতোই একই নিরাপত্তা ও গোপনীয়তার বৈশিষ্ট্য বজায় রাখে, কারণ এটি একটি বিশেষ SurfaceView তে রেন্ডার করা হয়।
ডিভাইসের প্রাপ্যতা
অ্যান্ড্রয়েড ১৪ (এপিআই লেভেল ৩৪) চালিত এবং এসডিকে এক্সটেনশন ভার্সন ১৫ বা তার উচ্চতর সংস্করণে চালিত ডিভাইসগুলিতে এমবেডেড ফটো পিকারটি সমর্থিত।
যেসব ডিভাইসে এই সক্ষমতাগুলো নেই , সেগুলো ক্লাসিক ফটো পিকার অথবা গুগল প্লে সার্ভিস ব্যবহার করে ব্যাকপোর্টেড সংস্করণটির ওপর নির্ভর করতে পারে।
জেটপ্যাক লাইব্রেরি নির্ভরতা
Jetpack ফটো পিকার লাইব্রেরিটিকে একটি ডিপেন্ডেন্সি হিসেবে অন্তর্ভুক্ত করুন:
// For apps using Jetpack Compose
implementation("androidx.photopicker:photopicker-compose:1.0.0-alpha01")
// For apps using Views
implementation("androidx.photopicker:photopicker:1.0.0-alpha01")
আপনি Jetpack Compose (প্রস্তাবিত) অথবা Views ব্যবহার করে এমবেডেড ফটো পিকারটি ইন্টিগ্রেট করতে পারেন।
জেটপ্যাক কম্পোজ ইন্টিগ্রেশন
EmbeddedPhotoPicker কম্পোজেবল ফাংশনটি আপনার Jetpack Compose স্ক্রিনের মধ্যে সরাসরি এমবেডেড ফটো পিকার UI অন্তর্ভুক্ত করার একটি পদ্ধতি প্রদান করে। এই কম্পোজেবলটি একটি SurfaceView তৈরি করে, যা এমবেডেড ফটো পিকার UI-কে ধারণ করে। এটি EmbeddedPhotoPicker সার্ভিসের সাথে সংযোগ পরিচালনা করে, ব্যবহারকারীর কার্যকলাপ সামলায় এবং কাজ করার জন্য কয়েকটি প্যারামিটারের মাধ্যমে নির্বাচিত মিডিয়া URI-গুলো কলিং অ্যাপ্লিকেশনে প্রেরণ করে।
val coroutineScope = rememberCoroutineScope()
val pickerState = rememberEmbeddedPhotoPickerState()
EmbeddedPhotoPicker(
state = pickerState,
onUriPermissionGranted = { uris ->
_attachments.value += uris
},
onUriPermissionRevoked = { uris ->
_attachments.value -= uris
},
onSelectionComplete = {
// Hide the embedded photo picker as the user is done with the
// photo/video selection
},
)
ক্রমাগত নির্বাচন

অন্তর্নির্মিত ফটো পিকারটি ব্যবহারকারীদের পিকারটি বন্ধ না করেই ফটো লাইব্রেরি থেকে ক্রমাগত আইটেম নির্বাচন এবং অনির্বাচন করার সুযোগ দেয়। অ্যাপের UI-তে নির্বাচিত ও অনির্বাচিত আইটেমগুলো ফটো পিকারের সাথে সিঙ্ক্রোনাইজ করা থাকে, যা একটি নির্বিঘ্ন ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।
ব্যবহারকারী অ্যাপের UI থেকে কোনো আইটেম অনির্বাচিত করলে, এমবেডেড পিকারকে তা জানানোর জন্য pickerState এর deselectUri বা deselectUris মেথড ব্যবহার করে Uri অনির্বাচিত করুন। আপনার নিজের অ্যাপের UI স্টেট ম্যানুয়ালি আপডেট করা আবশ্যক, কারণ এই মেথডগুলো কল করলে onUriPermissionRevoked কলব্যাকের মাধ্যমে আপনার অ্যাপকে কোনো নতুন বাতিল হওয়া URI সম্পর্কে জানানো হবে না।
coroutineScope.launch {
// Signal unselected media to the picker
pickerState.deselectUris(uris)
// Remove them from the list of selected media to be reflected in the app's UI
_attachments.value -= uris
}
ফটো পিকারটি ব্যক্তিগতকরণ করুন
অন্তর্নির্মিত ফটো পিকারটিতে ব্যক্তিগতকরণের বিকল্প রয়েছে, যা আপনাকে এর চেহারা ও আচরণ নিজের পছন্দমতো সাজিয়ে নিতে সাহায্য করে, যাতে এটি আপনার অ্যাপের ডিজাইন এবং ব্যবহারকারীর অভিজ্ঞতার সাথে আরও ভালোভাবে সমন্বিত হয়।
অ্যাকসেন্ট রঙ
ডিফল্টরূপে, এমবেডেড ফটো পিকারটি সিস্টেম দ্বারা প্রদত্ত ডাইনামিক রঙের উপর নির্ভর করে, যা ব্যবহারকারী ডিভাইস থিমিং অপশনে বিভিন্ন অ্যাপ জুড়ে সেট করতে পারেন। ফটো পিকারের বিভিন্ন প্রধান উপাদানের জন্য অ্যাকসেন্ট কালার ব্যবহার করা হবে। অন্য সব রঙ অ্যান্ড্রয়েড ম্যাটেরিয়াল নির্দেশিকা অনুসারে সেট করা হবে। পিকারের অ্যাকসেন্ট কালারটি ব্যক্তিগতকৃত করতে, EmbeddedPhotoPickerFeatureInfo অপশনটি নির্ধারণ করুন:
val info = EmbeddedPhotoPickerFeatureInfo.Builder().setAccentColor(0xFF0000).build()
EmbeddedPhotoPicker(
embeddedPhotoPickerFeatureInfo = info,
...
)
| অ্যাকসেন্ট রঙ সেট না করে | অ্যাকসেন্ট রঙ সহ (শীর্ষ) | অ্যাকসেন্ট রঙ সহ (বিস্তারিত) |
|---|---|---|
![]() | ![]() | ![]() |
অ্যাকসেন্ট রঙটি অবশ্যই সম্পূর্ণ অস্বচ্ছ হতে হবে। আলফা (স্বচ্ছতা) মান উপেক্ষা করা হয়। শুধুমাত্র ০.০৫ থেকে ০.৯ এর মধ্যে লুমিন্যান্স (উজ্জ্বলতা) মানযুক্ত রঙগুলোই অনুমোদিত।
মাত্রা
ডিফল্টরূপে, এমবেডেড পিকারের আকারের কোনো সীমা নেই, কিন্তু আপনি একটি মডিফায়ার নির্দিষ্ট করে এটিকে সীমিত করতে পারেন:
EmbeddedPhotoPicker(
modifier = Modifier.height(500.dp),
...
)
| সীমাহীন (বিস্তৃত) | ৫০০ ডিপি সীমা সহ (সম্প্রসারিত) |
|---|---|
![]() | ![]() |
ভিউ ইন্টিগ্রেশন
ভিউ ব্যবহার করে এমবেডেড ফটো পিকার যোগ করতে, আপনার লেআউট ফাইলে একটি এন্ট্রি যোগ করুন:
<view class="androidx.photopicker.EmbeddedPhotoPickerView"
android:id="@+id/photopicker"
android:layout_width="match_parent"
android:layout_height="match_parent" />
এরপর, আপনার অ্যাক্টিভিটির onCreate মেথডে নিম্নলিখিতভাবে ফটো পিকারটি ইনিশিয়ালাইজ করুন:
- লেআউট থেকে আপনার
EmbeddedPhotoPickerViewএর একটি রেফারেন্স নিন। - সিলেকশন ইভেন্টগুলো হ্যান্ডেল করার জন্য
EmbeddedPhotoPickerStateChangeListenerযোগ করুন। -
EmbeddedPhotoPickerFeatureInfoব্যবহার করে ফটো পিকারটি কনফিগার করুন, এর মধ্যে অ্যাকসেন্ট কালারের মতো যেকোনো কাস্টম সেটিংস অন্তর্ভুক্ত করুন।
// Keep track of the selected media
private val _attachments = MutableStateFlow(emptyList<Uri>())
val attachments = _attachments.asStateFlow()
private lateinit var picker: EmbeddedPhotoPickerView
private var openSession: EmbeddedPhotoPickerSession? = null
val pickerListener = object : EmbeddedPhotoPickerStateChangeListener {
override fun onSessionOpened(newSession: EmbeddedPhotoPickerSession) {
// Keep reference to the session to notify the embedded picker of user
// interactions on the calling app
openSession = newSession
}
override fun onSessionError(throwable: Throwable) {}
override fun onUriPermissionGranted(uris: List<Uri>) {
// Add newly selected media to our tracked list
_attachments += uris
}
override fun onUriPermissionRevoked(uris: List<Uri>) {
// Remove newly unselected media from our tracked list
_attachments -= uris
}
override fun onSelectionComplete() {
// Hide the embedded photo picker as the user is done with the
// photo/video selection
}
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main_view)
picker = findViewById(R.id.photopicker)
// Attach the embedded picker event listener to update the app's UI
picker.addEmbeddedPhotoPickerStateChangeListener(pickerListener)
// Customize embedded picker's features: accent color, max selectable items,
// pre-selected URIs, filter out mime types
picker.setEmbeddedPhotoPickerFeatureInfo(
// Set a custom accent color
EmbeddedPhotoPickerFeatureInfo.Builder().setAccentColor(0xFF0000).build()
)
}
এমবেডেড পিকারের সাথে ইন্টারঅ্যাক্ট করার জন্য আপনি EmbeddedPhotoPickerSession এর বিভিন্ন মেথড কল করতে পারেন:
// Notify the embedded picker of a configuration change
openSession.notifyConfigurationChanged(newConfig)
// Update the embedded picker to expand following a user interaction
openSession.notifyPhotoPickerExpanded(/* expanded: */ true)
// Resize the embedded picker
openSession.notifyResized(/* width: */ 512, /* height: */ 256)
// Show/hide the embedded picker (after a form has been submitted)
openSession.notifyVisibilityChanged(/* visible: */ false)
// Remove unselected media from the embedded picker after they have been
// unselected from the host app's UI
openSession.requestRevokeUriPermission(removedUris)




