একটি নোট নেওয়ার অ্যাপ তৈরি করুন

নোট নেওয়া হল Android-এর একটি মূল ক্ষমতা যা বড় স্ক্রিনের ডিভাইসে ব্যবহারকারীর প্রোডাক্টিভিটি উন্নত করে। নোট-নেওয়ার অ্যাপ ব্যবহারকারীদের ফ্লোটিং উইন্ডো বা ফুল স্ক্রিনে লিখতে ও স্কেচ করতে, স্ক্রিন কন্টেন্ট ক্যাপচার ও অ্যানোটেট করতে এবং পরে পর্যালোচনা ও রিভিশনের জন্য নোট সেভ করতে দেয়।

ব্যবহারকারীরা লক স্ক্রিন থেকে বা অন্যান্য অ্যাপ চালানোর সময় নোট নেওয়ার অ্যাপ অ্যাক্সেস করতে পারবেন।

নোট নেওয়ার জন্য স্টাইলাস ব্যবহারের সুবিধা ব্যবহারকারীদের অসাধারণ অভিজ্ঞতা প্রদান করে।

Notes-এর কার্যকারিতার সংগ্রহ

RoleManager.ROLE_NOTES ভূমিকা নোট নেওয়ার অ্যাপ শনাক্ত করে এবং সেগুলিকে LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE অনুমতি দেয়।

আপনার অ্যাপের জন্য নোটের ভূমিকা পেতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. ভূমিকার স্ট্যাটাস চেক করতে isRoleAvailable() নম্বরে কল করুন।
  2. Notes-এর কার্যকারিতার সংগ্রহ উপলভ্য থাকলে, Notes-নির্দিষ্ট ইনটেন্ট পেতে createRequestRoleIntent() কল করুন।
  3. ব্যবহারকারীকে আপনার অ্যাপে নোটের ভূমিকা দেওয়ার জন্য প্রম্পট করতে, নোটের ইনটেন্ট সহ startActivityForResult() কল করুন।

শুধুমাত্র একটি অ্যাপ নোটের ভূমিকা পালন করতে পারে।

ইমপ্লিসিট ACTION_CREATE_NOTE ইনটেন্ট অ্যাকশনের উত্তরে অ্যাপটি খোলে। ডিভাইসের লক স্ক্রিন থেকে চালু করা হলে, অ্যাপটি ফুল স্ক্রিনে খোলে; স্ক্রিন আনলক করা অবস্থায় চালু করা হলে, ফ্লোটিং উইন্ডোতে খোলে।

অ্যাপ ম্যানিফেস্ট

নোট রোলের জন্য উপযুক্ত হতে, আপনার অ্যাপে অবশ্যই অ্যাপ ম্যানিফেস্টে নিম্নলিখিত ঘোষণা থাকতে হবে:

<activity
    android:name="YourActivityName"
    android:exported="true"
    android:showWhenLocked="true"
    android:turnScreenOn="true">
    <intent-filter>
        <action android:name="android.intent.action.CREATE_NOTE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

এই ঘোষণার মাধ্যমে ব্যবহারকারীরা আপনার অ্যাপকে নোট নেওয়ার ভূমিকা অ্যাসাইন করতে পারবেন, যার ফলে এটি ডিফল্ট নোট‑নেওয়ার অ্যাপ্লিকেশন হয়ে উঠবে:

  • ACTION_CREATE_NOTE ইনটেন্ট অ্যাকশন সেট করে যার উত্তর আপনার অ্যাপ দেয়

  • showWhenLocked ডিভাইসের লক স্ক্রিন থেকে আপনার অ্যাপ অ্যাক্সেসযোগ্য করে তোলে

  • turnScreenOn অ্যাপ চালু হলে ডিভাইসের স্ক্রিন চালু করার অনুমতি দেয়

অ্যাপ্লিকেশনের বৈশিষ্ট্যগুলি

বড় স্ক্রিনের জন্য আলাদাভাবে তৈরি নোট নেওয়ার অ্যাপে নোট নেওয়ার সব ধরনের সুবিধা উপলভ্য থাকে।

স্টাইলাস সংক্রান্ত সহায়তা

আপনার অ্যাপ যখন EXTRA_USE_STYLUS_MODE ইনটেন্ট এক্সট্রা true-এ সেট করে চালু করা হয়, তখন অ্যাপের এমন একটি নোট খোলা উচিত যা স্টাইলাস (বা আঙুলের স্পর্শ) ইনপুট গ্রহণ করে।

ইনটেন্ট এক্সট্রা false-এ সেট করা থাকলে, আপনার অ্যাপের এমন একটি নোট খোলা উচিত যা কীবোর্ড ইনপুট গ্রহণ করে।

লকস্ক্রিন অ্যাক্সেস

আপনার অ্যাপে অবশ্যই ফুল-স্ক্রিন অ্যাক্টিভিটি থাকতে হবে যা ডিভাইসের লক স্ক্রিন থেকে অ্যাপটি খোলা হলে রান করে।

ব্যবহারকারী যদি অতীতের নোট দেখানোর জন্য সম্মতি দিয়ে থাকেন (আনলক করা ডিভাইসের অবস্থায়), তাহলে আপনার অ্যাপে শুধুমাত্র ঐতিহাসিক নোট দেখানো উচিত। অন্যথায়, লক স্ক্রিন থেকে খোলা হলে, আপনার অ্যাপকে সবসময় নতুন নোট তৈরি করতে হবে।

KeyguardManager#isKeyguardLocked()-এর মাধ্যমে আপনার অ্যাপ লক স্ক্রিন থেকে লঞ্চ করা হয়েছে কিনা তা চেক করতে পারবেন। ব্যবহারকারীকে ডিভাইস যাচাই ও আনলক করতে বলতে, KeyguardManager#requestDismissKeyguard() কল করুন:

val keyguardManager =
getSystemService(KEYGUARD_SERVICE) as KeyguardManager
keyguardManager.requestDismissKeyguard(  this, object :
KeyguardDismissCallback() {  override fun onDismissError() {  // Unlock failed.
Dismissing keyguard is not feasible.  }  override fun onDismissSucceeded() {  //
Unlock succeeded. Device is now unlocked.  }  override fun onDismissCancelled()
{  // Unlock failed. User cancelled operation or request otherwise cancelled.  }
 } )

ফ্লোটিং উইন্ডো

প্রাসঙ্গিক নোট নেওয়ার জন্য, আপনার অ্যাপকে অবশ্যই এমন একটি অ্যাক্টিভিটি প্রদান করতে হবে যা অন্য অ্যাপ্লিকেশন চলাকালীন ফ্লোটিং উইন্ডোতে খোলে।

আপনার অ্যাপে multi-instance মোড কাজ করা উচিত যাতে ব্যবহারকারীরা একাধিক ফ্লোটিং উইন্ডোতে একাধিক নোট তৈরি করতে পারেন, এমনকি আপনার নোট‑নেওয়ার অ্যাপ ফুল স্ক্রিন বা স্প্লিট‑স্ক্রিন মোডে চালু থাকলেও।

কন্টেন্ট ক্যাপচার

নোট নেওয়ার অ্যাপের একটি গুরুত্বপূর্ণ ক্ষমতা হল কন্টেন্ট ক্যাপচার করা। কন্টেন্ট ক্যাপচার করার মাধ্যমে, ব্যবহারকারীরা নোট নেওয়ার অ্যাপের ফ্লোটিং উইন্ডোর পিছনে ডিসপ্লের স্ক্রিনশট নিতে পারবেন। ব্যবহারকারীরা ডিসপ্লের সব বা কিছু অংশ ক্যাপচার করতে, কন্টেন্টটি তাদের নোটে পেস্ট করতে এবং ক্যাপচার করা কন্টেন্ট অ্যানোটেট বা হাইলাইট করতে পারেন।

আপনার নোট-নেওয়ার অ্যাপে এমন UI অ্যাফর্ডেন্স থাকতে হবে যা registerForActivityResult()-এর তৈরি করা ActivityResultLauncher লঞ্চ করে। ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE ইনটেন্ট অ্যাকশন সরাসরি বা ActivityResultContract-এর মাধ্যমে লঞ্চারকে প্রদান করা হয়।

সিস্টেম অ্যাক্টিভিটি কন্টেন্ট ক্যাপচার করে, ডিভাইসে সেভ করে এবং registerForActivityResult()-এর কলব্যাক আর্গুমেন্টে আপনার অ্যাপে কন্টেন্ট URI ফেরত পাঠায়।

নিম্নলিখিত উদাহরণে একটি সাধারণ StartActivityForResult চুক্তি ব্যবহার করা হয়েছে:

private val startForResult =
registerForActivityResult(  ActivityResultContracts.StartActivityForResult()) {
 result: ActivityResult ->  if (result.resultCode ==
Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) {  val uri = result.data?.data  // Use
the URI to paste the captured content into the note.  }  } override fun
onCreate(savedInstanceState: Bundle?) {  super.onCreate(savedInstanceState)
setContent {  NotesTheme {  Surface(color =
MaterialTheme.colorScheme.background) {  CaptureButton(  onClick = {
Log.i("ContentCapture", "Launching intent...")
startForResult.launch(Intent(ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE))
})  }  }  } } @Composable fun CaptureButton(onClick: () -> Unit) {
Button(onClick = onClick)
 {Text("Capture Content")} }

আপনার অ্যাপকে সব ফলাফল কোড ম্যানেজ করতে হবে:

কন্টেন্ট ক্যাপচার করা হয়ে গেলে, ক্যাপচার করা ছবি নোটে পেস্ট করুন, যেমন:

registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
 result: ActivityResult ->  if (result.resultCode ==
Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) {  val uri = result.data?data  // Use
the URI to paste the captured content into the note.  } }

কন্টেন্ট ক্যাপচার ফিচারটি শুধুমাত্র তখনই UI অ্যাফোর্ডেন্সের মাধ্যমে প্রকাশ করা উচিত যখন আপনার নোট নেওয়ার অ্যাপটি একটি ফ্লোটিং উইন্ডোতে চলছে—ফুল স্ক্রিনে চলার সময় নয়, ডিভাইসের লক স্ক্রিন থেকে চালু করা হয়েছে। (ব্যবহারকারীরা ডিভাইসের স্ক্রিনশট নেওয়ার সুবিধা ব্যবহার করে নোট নেওয়ার অ্যাপের স্ক্রিনশট নিতে পারবেন।)

আপনার অ্যাপ ফ্লোটিং উইন্ডোতে (বা বাবল) আছে কিনা তা নির্ধারণ করতে, নিম্নলিখিত পদ্ধতিগুলি কল করুন:

  • isLaunchedFromBubble() আপনার নোট নেওয়ার অ্যাপটি ডিভাইসের লক স্ক্রিন থেকে ফুল স্ক্রিনে চালু করা হয়নি তা চেক করতে
  • isRoleHeld(RoleManager.ROLE_NOTES) যাচাই করতে যে আপনার অ্যাপটি ডিফল্ট নোট‑নেওয়ার অ্যাপ (আপনার অ্যাপটি একটি কথোপকথন বা অন্য ধরনের বাবেলে চলতে পারে যদি অ্যাপটি নোটের ভূমিকা পালন না করে)

অতিরিক্ত রিসোর্স

,

নোট নেওয়া হল Android-এর একটি মূল ক্ষমতা যা বড় স্ক্রিনের ডিভাইসে ব্যবহারকারীর প্রোডাক্টিভিটি উন্নত করে। নোট-নেওয়ার অ্যাপ ব্যবহারকারীদের ফ্লোটিং উইন্ডো বা ফুল স্ক্রিনে লিখতে ও স্কেচ করতে, স্ক্রিন কন্টেন্ট ক্যাপচার ও অ্যানোটেট করতে এবং পরে পর্যালোচনা ও রিভিশনের জন্য নোট সেভ করতে দেয়।

ব্যবহারকারীরা লক স্ক্রিন থেকে বা অন্যান্য অ্যাপ চালানোর সময় নোট নেওয়ার অ্যাপ অ্যাক্সেস করতে পারবেন।

নোট নেওয়ার জন্য স্টাইলাস ব্যবহারের সুবিধা ব্যবহারকারীদের অসাধারণ অভিজ্ঞতা প্রদান করে।

Notes-এর কার্যকারিতার সংগ্রহ

RoleManager.ROLE_NOTES ভূমিকা নোট নেওয়ার অ্যাপ শনাক্ত করে এবং সেগুলিকে LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE অনুমতি দেয়।

আপনার অ্যাপের জন্য নোটের ভূমিকা পেতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. ভূমিকার স্ট্যাটাস চেক করতে isRoleAvailable() নম্বরে কল করুন।
  2. Notes-এর কার্যকারিতার সংগ্রহ উপলভ্য থাকলে, Notes-নির্দিষ্ট ইনটেন্ট পেতে createRequestRoleIntent() কল করুন।
  3. ব্যবহারকারীকে আপনার অ্যাপে নোটের ভূমিকা দেওয়ার জন্য প্রম্পট করতে, নোটের ইনটেন্ট সহ startActivityForResult() কল করুন।

শুধুমাত্র একটি অ্যাপ নোটের ভূমিকা পালন করতে পারে।

ইমপ্লিসিট ACTION_CREATE_NOTE ইনটেন্ট অ্যাকশনের উত্তরে অ্যাপটি খোলে। ডিভাইসের লক স্ক্রিন থেকে চালু করা হলে, অ্যাপটি ফুল স্ক্রিনে খোলে; স্ক্রিন আনলক করা অবস্থায় চালু করা হলে, ফ্লোটিং উইন্ডোতে খোলে।

অ্যাপ ম্যানিফেস্ট

নোট রোলের জন্য উপযুক্ত হতে, আপনার অ্যাপে অবশ্যই অ্যাপ ম্যানিফেস্টে নিম্নলিখিত ঘোষণা থাকতে হবে:

<activity
    android:name="YourActivityName"
    android:exported="true"
    android:showWhenLocked="true"
    android:turnScreenOn="true">
    <intent-filter>
        <action android:name="android.intent.action.CREATE_NOTE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

এই ঘোষণার মাধ্যমে ব্যবহারকারীরা আপনার অ্যাপকে নোট নেওয়ার ভূমিকা অ্যাসাইন করতে পারবেন, যার ফলে এটি ডিফল্ট নোট‑নেওয়ার অ্যাপ্লিকেশন হয়ে উঠবে:

  • ACTION_CREATE_NOTE ইনটেন্ট অ্যাকশন সেট করে যার উত্তর আপনার অ্যাপ দেয়

  • showWhenLocked ডিভাইসের লক স্ক্রিন থেকে আপনার অ্যাপ অ্যাক্সেসযোগ্য করে তোলে

  • turnScreenOn অ্যাপ চালু হলে ডিভাইসের স্ক্রিন চালু করার অনুমতি দেয়

অ্যাপ্লিকেশনের বৈশিষ্ট্যগুলি

বড় স্ক্রিনের জন্য আলাদাভাবে তৈরি নোট নেওয়ার অ্যাপে নোট নেওয়ার সব ধরনের সুবিধা উপলভ্য থাকে।

স্টাইলাস সংক্রান্ত সহায়তা

আপনার অ্যাপ যখন EXTRA_USE_STYLUS_MODE ইনটেন্ট এক্সট্রা true-এ সেট করে চালু করা হয়, তখন অ্যাপের এমন একটি নোট খোলা উচিত যা স্টাইলাস (বা আঙুলের স্পর্শ) ইনপুট গ্রহণ করে।

ইনটেন্ট এক্সট্রা false-এ সেট করা থাকলে, আপনার অ্যাপের এমন একটি নোট খোলা উচিত যা কীবোর্ড ইনপুট গ্রহণ করে।

লকস্ক্রিন অ্যাক্সেস

আপনার অ্যাপে অবশ্যই ফুল-স্ক্রিন অ্যাক্টিভিটি থাকতে হবে যা ডিভাইসের লক স্ক্রিন থেকে অ্যাপটি খোলা হলে রান করে।

ব্যবহারকারী যদি অতীতের নোট দেখানোর জন্য সম্মতি দিয়ে থাকেন (আনলক করা ডিভাইসের অবস্থায়), তাহলে আপনার অ্যাপে শুধুমাত্র ঐতিহাসিক নোট দেখানো উচিত। অন্যথায়, লক স্ক্রিন থেকে খোলা হলে, আপনার অ্যাপকে সবসময় নতুন নোট তৈরি করতে হবে।

KeyguardManager#isKeyguardLocked()-এর মাধ্যমে আপনার অ্যাপ লক স্ক্রিন থেকে লঞ্চ করা হয়েছে কিনা তা চেক করতে পারবেন। ব্যবহারকারীকে ডিভাইস যাচাই ও আনলক করতে বলতে, KeyguardManager#requestDismissKeyguard() কল করুন:

val keyguardManager =
getSystemService(KEYGUARD_SERVICE) as KeyguardManager
keyguardManager.requestDismissKeyguard(  this, object :
KeyguardDismissCallback() {  override fun onDismissError() {  // Unlock failed.
Dismissing keyguard is not feasible.  }  override fun onDismissSucceeded() {  //
Unlock succeeded. Device is now unlocked.  }  override fun onDismissCancelled()
{  // Unlock failed. User cancelled operation or request otherwise cancelled.  }
 } )

ফ্লোটিং উইন্ডো

প্রাসঙ্গিক নোট নেওয়ার জন্য, আপনার অ্যাপকে অবশ্যই এমন একটি অ্যাক্টিভিটি প্রদান করতে হবে যা অন্য অ্যাপ্লিকেশন চলাকালীন ফ্লোটিং উইন্ডোতে খোলে।

আপনার অ্যাপে multi-instance মোড কাজ করা উচিত যাতে ব্যবহারকারীরা একাধিক ফ্লোটিং উইন্ডোতে একাধিক নোট তৈরি করতে পারেন, এমনকি আপনার নোট‑নেওয়ার অ্যাপ ফুল স্ক্রিন বা স্প্লিট‑স্ক্রিন মোডে চালু থাকলেও।

কন্টেন্ট ক্যাপচার

নোট নেওয়ার অ্যাপের একটি গুরুত্বপূর্ণ ক্ষমতা হল কন্টেন্ট ক্যাপচার করা। কন্টেন্ট ক্যাপচার করার মাধ্যমে, ব্যবহারকারীরা নোট নেওয়ার অ্যাপের ফ্লোটিং উইন্ডোর পিছনে ডিসপ্লের স্ক্রিনশট নিতে পারবেন। ব্যবহারকারীরা ডিসপ্লের সব বা কিছু অংশ ক্যাপচার করতে, কন্টেন্টটি তাদের নোটে পেস্ট করতে এবং ক্যাপচার করা কন্টেন্ট অ্যানোটেট বা হাইলাইট করতে পারেন।

আপনার নোট-নেওয়ার অ্যাপে এমন UI অ্যাফর্ডেন্স থাকতে হবে যা registerForActivityResult()-এর তৈরি করা ActivityResultLauncher লঞ্চ করে। ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE ইনটেন্ট অ্যাকশন সরাসরি বা ActivityResultContract-এর মাধ্যমে লঞ্চারকে প্রদান করা হয়।

সিস্টেম অ্যাক্টিভিটি কন্টেন্ট ক্যাপচার করে, ডিভাইসে সেভ করে এবং registerForActivityResult()-এর কলব্যাক আর্গুমেন্টে আপনার অ্যাপে কন্টেন্ট URI ফেরত পাঠায়।

নিম্নলিখিত উদাহরণে একটি সাধারণ StartActivityForResult চুক্তি ব্যবহার করা হয়েছে:

private val startForResult =
registerForActivityResult(  ActivityResultContracts.StartActivityForResult()) {
 result: ActivityResult ->  if (result.resultCode ==
Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) {  val uri = result.data?.data  // Use
the URI to paste the captured content into the note.  }  } override fun
onCreate(savedInstanceState: Bundle?) {  super.onCreate(savedInstanceState)
setContent {  NotesTheme {  Surface(color =
MaterialTheme.colorScheme.background) {  CaptureButton(  onClick = {
Log.i("ContentCapture", "Launching intent...")
startForResult.launch(Intent(ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE))
})  }  }  } } @Composable fun CaptureButton(onClick: () -> Unit) {
Button(onClick = onClick)
 {Text("Capture Content")} }

আপনার অ্যাপকে সব ফলাফল কোড ম্যানেজ করতে হবে:

কন্টেন্ট ক্যাপচার করা হয়ে গেলে, ক্যাপচার করা ছবি নোটে পেস্ট করুন, যেমন:

registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
 result: ActivityResult ->  if (result.resultCode ==
Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) {  val uri = result.data?data  // Use
the URI to paste the captured content into the note.  } }

কন্টেন্ট ক্যাপচার ফিচারটি শুধুমাত্র তখনই UI অ্যাফোর্ডেন্সের মাধ্যমে প্রকাশ করা উচিত যখন আপনার নোট নেওয়ার অ্যাপটি একটি ফ্লোটিং উইন্ডোতে চলছে—ফুল স্ক্রিনে চলার সময় নয়, ডিভাইসের লক স্ক্রিন থেকে চালু করা হয়েছে। (ব্যবহারকারীরা ডিভাইসের স্ক্রিনশট নেওয়ার সুবিধা ব্যবহার করে নোট নেওয়ার অ্যাপের স্ক্রিনশট নিতে পারবেন।)

আপনার অ্যাপ ফ্লোটিং উইন্ডোতে (বা বাবল) আছে কিনা তা নির্ধারণ করতে, নিম্নলিখিত পদ্ধতিগুলি কল করুন:

  • isLaunchedFromBubble() আপনার নোট নেওয়ার অ্যাপটি ডিভাইসের লক স্ক্রিন থেকে ফুল স্ক্রিনে চালু করা হয়নি তা চেক করতে
  • isRoleHeld(RoleManager.ROLE_NOTES) যাচাই করতে যে আপনার অ্যাপটি ডিফল্ট নোট‑নেওয়ার অ্যাপ (আপনার অ্যাপটি একটি কথোপকথন বা অন্য ধরনের বাবেলে চলতে পারে যদি অ্যাপটি নোটের ভূমিকা পালন না করে)

অতিরিক্ত রিসোর্স

,

নোট নেওয়া হল Android-এর একটি মূল ক্ষমতা যা বড় স্ক্রিনের ডিভাইসে ব্যবহারকারীর প্রোডাক্টিভিটি উন্নত করে। নোট-নেওয়ার অ্যাপ ব্যবহারকারীদের ফ্লোটিং উইন্ডো বা ফুল স্ক্রিনে লিখতে ও স্কেচ করতে, স্ক্রিন কন্টেন্ট ক্যাপচার ও অ্যানোটেট করতে এবং পরে পর্যালোচনা ও রিভিশনের জন্য নোট সেভ করতে দেয়।

ব্যবহারকারীরা লক স্ক্রিন থেকে বা অন্যান্য অ্যাপ চালানোর সময় নোট নেওয়ার অ্যাপ অ্যাক্সেস করতে পারবেন।

নোট নেওয়ার জন্য স্টাইলাস ব্যবহারের সুবিধা ব্যবহারকারীদের অসাধারণ অভিজ্ঞতা প্রদান করে।

Notes-এর কার্যকারিতার সংগ্রহ

RoleManager.ROLE_NOTES ভূমিকা নোট নেওয়ার অ্যাপ শনাক্ত করে এবং সেগুলিকে LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE অনুমতি দেয়।

আপনার অ্যাপের জন্য নোটের ভূমিকা পেতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. ভূমিকার স্ট্যাটাস চেক করতে isRoleAvailable() নম্বরে কল করুন।
  2. Notes-এর কার্যকারিতার সংগ্রহ উপলভ্য থাকলে, Notes-নির্দিষ্ট ইনটেন্ট পেতে createRequestRoleIntent() কল করুন।
  3. ব্যবহারকারীকে আপনার অ্যাপে নোটের ভূমিকা দেওয়ার জন্য প্রম্পট করতে, নোটের ইনটেন্ট সহ startActivityForResult() কল করুন।

শুধুমাত্র একটি অ্যাপ নোটের ভূমিকা পালন করতে পারে।

ইমপ্লিসিট ACTION_CREATE_NOTE ইনটেন্ট অ্যাকশনের উত্তরে অ্যাপটি খোলে। ডিভাইসের লক স্ক্রিন থেকে চালু করা হলে, অ্যাপটি ফুল স্ক্রিনে খোলে; স্ক্রিন আনলক করা অবস্থায় চালু করা হলে, ফ্লোটিং উইন্ডোতে খোলে।

অ্যাপ ম্যানিফেস্ট

নোট রোলের জন্য উপযুক্ত হতে, আপনার অ্যাপে অবশ্যই অ্যাপ ম্যানিফেস্টে নিম্নলিখিত ঘোষণা থাকতে হবে:

<activity
    android:name="YourActivityName"
    android:exported="true"
    android:showWhenLocked="true"
    android:turnScreenOn="true">
    <intent-filter>
        <action android:name="android.intent.action.CREATE_NOTE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

এই ঘোষণার মাধ্যমে ব্যবহারকারীরা আপনার অ্যাপকে নোট নেওয়ার ভূমিকা অ্যাসাইন করতে পারবেন, যার ফলে এটি ডিফল্ট নোট‑নেওয়ার অ্যাপ্লিকেশন হয়ে উঠবে:

  • ACTION_CREATE_NOTE ইনটেন্ট অ্যাকশন সেট করে যার উত্তর আপনার অ্যাপ দেয়

  • showWhenLocked ডিভাইসের লক স্ক্রিন থেকে আপনার অ্যাপ অ্যাক্সেসযোগ্য করে তোলে

  • turnScreenOn অ্যাপ চালু হলে ডিভাইসের স্ক্রিন চালু করার অনুমতি দেয়

অ্যাপ্লিকেশনের বৈশিষ্ট্যগুলি

বড় স্ক্রিনের জন্য আলাদাভাবে তৈরি নোট নেওয়ার অ্যাপে নোট নেওয়ার সব ধরনের সুবিধা উপলভ্য থাকে।

স্টাইলাস সংক্রান্ত সহায়তা

আপনার অ্যাপ যখন EXTRA_USE_STYLUS_MODE ইনটেন্ট এক্সট্রা true-এ সেট করে চালু করা হয়, তখন অ্যাপের এমন একটি নোট খোলা উচিত যা স্টাইলাস (বা আঙুলের স্পর্শ) ইনপুট গ্রহণ করে।

ইনটেন্ট এক্সট্রা false-এ সেট করা থাকলে, আপনার অ্যাপের এমন একটি নোট খোলা উচিত যা কীবোর্ড ইনপুট গ্রহণ করে।

লকস্ক্রিন অ্যাক্সেস

আপনার অ্যাপে অবশ্যই ফুল-স্ক্রিন অ্যাক্টিভিটি থাকতে হবে যা ডিভাইসের লক স্ক্রিন থেকে অ্যাপটি খোলা হলে রান করে।

ব্যবহারকারী যদি অতীতের নোট দেখানোর জন্য সম্মতি দিয়ে থাকেন (আনলক করা ডিভাইসের অবস্থায়), তাহলে আপনার অ্যাপে শুধুমাত্র ঐতিহাসিক নোট দেখানো উচিত। অন্যথায়, লক স্ক্রিন থেকে খোলা হলে, আপনার অ্যাপকে সবসময় নতুন নোট তৈরি করতে হবে।

KeyguardManager#isKeyguardLocked()-এর মাধ্যমে আপনার অ্যাপ লক স্ক্রিন থেকে লঞ্চ করা হয়েছে কিনা তা চেক করতে পারবেন। ব্যবহারকারীকে ডিভাইস যাচাই ও আনলক করতে বলতে, KeyguardManager#requestDismissKeyguard() কল করুন:

val keyguardManager =
getSystemService(KEYGUARD_SERVICE) as KeyguardManager
keyguardManager.requestDismissKeyguard(  this, object :
KeyguardDismissCallback() {  override fun onDismissError() {  // Unlock failed.
Dismissing keyguard is not feasible.  }  override fun onDismissSucceeded() {  //
Unlock succeeded. Device is now unlocked.  }  override fun onDismissCancelled()
{  // Unlock failed. User cancelled operation or request otherwise cancelled.  }
 } )

ফ্লোটিং উইন্ডো

প্রাসঙ্গিক নোট নেওয়ার জন্য, আপনার অ্যাপকে অবশ্যই এমন একটি অ্যাক্টিভিটি প্রদান করতে হবে যা অন্য অ্যাপ্লিকেশন চলাকালীন ফ্লোটিং উইন্ডোতে খোলে।

আপনার অ্যাপে multi-instance মোড কাজ করা উচিত যাতে ব্যবহারকারীরা একাধিক ফ্লোটিং উইন্ডোতে একাধিক নোট তৈরি করতে পারেন, এমনকি আপনার নোট‑নেওয়ার অ্যাপ ফুল স্ক্রিন বা স্প্লিট‑স্ক্রিন মোডে চালু থাকলেও।

কন্টেন্ট ক্যাপচার

নোট নেওয়ার অ্যাপের একটি গুরুত্বপূর্ণ ক্ষমতা হল কন্টেন্ট ক্যাপচার করা। কন্টেন্ট ক্যাপচার করার মাধ্যমে, ব্যবহারকারীরা নোট নেওয়ার অ্যাপের ফ্লোটিং উইন্ডোর পিছনে ডিসপ্লের স্ক্রিনশট নিতে পারবেন। ব্যবহারকারীরা ডিসপ্লের সব বা কিছু অংশ ক্যাপচার করতে, কন্টেন্টটি তাদের নোটে পেস্ট করতে এবং ক্যাপচার করা কন্টেন্ট অ্যানোটেট বা হাইলাইট করতে পারেন।

আপনার নোট-নেওয়ার অ্যাপে এমন UI অ্যাফর্ডেন্স থাকতে হবে যা registerForActivityResult()-এর তৈরি করা ActivityResultLauncher লঞ্চ করে। ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE ইনটেন্ট অ্যাকশন সরাসরি বা ActivityResultContract-এর মাধ্যমে লঞ্চারকে প্রদান করা হয়।

সিস্টেম অ্যাক্টিভিটি কন্টেন্ট ক্যাপচার করে, ডিভাইসে সেভ করে এবং registerForActivityResult()-এর কলব্যাক আর্গুমেন্টে আপনার অ্যাপে কন্টেন্ট URI ফেরত পাঠায়।

নিম্নলিখিত উদাহরণে একটি সাধারণ StartActivityForResult চুক্তি ব্যবহার করা হয়েছে:

private val startForResult =
registerForActivityResult(  ActivityResultContracts.StartActivityForResult()) {
 result: ActivityResult ->  if (result.resultCode ==
Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) {  val uri = result.data?.data  // Use
the URI to paste the captured content into the note.  }  } override fun
onCreate(savedInstanceState: Bundle?) {  super.onCreate(savedInstanceState)
setContent {  NotesTheme {  Surface(color =
MaterialTheme.colorScheme.background) {  CaptureButton(  onClick = {
Log.i("ContentCapture", "Launching intent...")
startForResult.launch(Intent(ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE))
})  }  }  } } @Composable fun CaptureButton(onClick: () -> Unit) {
Button(onClick = onClick)
 {Text("Capture Content")} }

আপনার অ্যাপকে সব ফলাফল কোড ম্যানেজ করতে হবে:

কন্টেন্ট ক্যাপচার করা হয়ে গেলে, ক্যাপচার করা ছবি নোটে পেস্ট করুন, যেমন:

registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
 result: ActivityResult ->  if (result.resultCode ==
Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) {  val uri = result.data?data  // Use
the URI to paste the captured content into the note.  } }

কন্টেন্ট ক্যাপচার ফিচারটি শুধুমাত্র তখনই UI অ্যাফোর্ডেন্সের মাধ্যমে প্রকাশ করা উচিত যখন আপনার নোট নেওয়ার অ্যাপটি একটি ফ্লোটিং উইন্ডোতে চলছে—ফুল স্ক্রিনে চলার সময় নয়, ডিভাইসের লক স্ক্রিন থেকে চালু করা হয়েছে। (ব্যবহারকারীরা ডিভাইসের স্ক্রিনশট নেওয়ার সুবিধা ব্যবহার করে নোট নেওয়ার অ্যাপের স্ক্রিনশট নিতে পারবেন।)

আপনার অ্যাপ ফ্লোটিং উইন্ডোতে (বা বাবল) আছে কিনা তা নির্ধারণ করতে, নিম্নলিখিত পদ্ধতিগুলি কল করুন:

  • isLaunchedFromBubble() আপনার নোট নেওয়ার অ্যাপটি ডিভাইসের লক স্ক্রিন থেকে ফুল স্ক্রিনে চালু করা হয়নি তা চেক করতে
  • isRoleHeld(RoleManager.ROLE_NOTES) যাচাই করতে যে আপনার অ্যাপটি ডিফল্ট নোট‑নেওয়ার অ্যাপ (আপনার অ্যাপটি একটি কথোপকথন বা অন্য ধরনের বাবেলে চলতে পারে যদি অ্যাপটি নোটের ভূমিকা পালন না করে)

অতিরিক্ত রিসোর্স