创建记事应用

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

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

নোট গ্রহণের জন্য স্টাইলাস সমর্থন একটি ব্যতিক্রমী ব্যবহারকারীর অভিজ্ঞতা প্রদান করে।

নোট ভূমিকা

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

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

  1. ভূমিকার স্থিতি পরীক্ষা করতে isRoleAvailable() কল করুন।
  2. নোটের ভূমিকা উপলব্ধ থাকলে, একটি নোট-নির্দিষ্ট অভিপ্রায় পেতে 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.  }
 } )

জাভা

KeyguardManager keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);

boolean isLocked = keyguardManager.isKeyguardLocked();

keyguardManager.requestDismissKeyguard(
    this,
    new KeyguardManager.KeyguardDismissCallback() {

  @Override
  public void onDismissError() {
      // Unlock failed. Dismissing keyguard is not feasible.
  }

  @Override
  public void onDismissSucceeded() {
      // Unlock succeeded. Device is now unlocked.
  }

  @Override
  public void 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")} }

জাভা

private final ActivityResultLauncher<Intent> startForResult = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) {
            Uri uri = result.getData() != null ? result.getData().getData() : null;
            // Use the URI to paste the captured content into the note.
        }
    });

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

    Button captureButton = findViewById(R.id.capture_button);

    captureButton.setOnClickListener(
        view -> {
            Log.i("ContentCapture", "Launching intent...");
            startForResult.launch(new Intent(ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE));
        });
}

আপনার অ্যাপের সমস্ত ফলাফল কোড পরিচালনা করা উচিত:

কন্টেন্ট ক্যাপচার সফল হলে, ক্যাপচার করা ছবি নোটে পেস্ট করুন, উদাহরণস্বরূপ:

কোটলিন

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.  } }

জাভা

registerForActivityResult(new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == Intent.CAPTURE_CONTENT_FOR_NOTE_SUCCESS) {
            Uri uri = result.getData() != null ? result.getData().getData() : null;
            // Use the URI to paste the captured content into the note.
        }
    });

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

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

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

অতিরিক্ত সম্পদ