创建记事应用

כתיבת הערות היא תכונה מרכזית ב-Android שמשפרת את הפרודוקטיביות של משתמשים במכשירים עם מסך גדול. אפליקציות לרישום הערות מאפשרות למשתמשים לכתוב ולרשום בחלון צף או במסך מלא, לצלם את התוכן במסך ולהוסיף לו הערות, ולשמור את ההערות לבדיקה ותיקון מאוחר יותר.

המשתמשים יכולים לגשת לאפליקציות לרישום הערות ממסך הנעילה או תוך כדי הרצה של באפליקציות.

תמיכה בסטיילוס לכתיבת הערות מספקת חוויית משתמש יוצאת מן הכלל.

תפקיד ההערות

RoleManager.ROLE_NOTES מזהה אפליקציות לרישום הערות ומעניק להן את התפקיד LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE הרשאה.

כדי לרכוש את תפקיד ההערות לאפליקציה:

  1. התקשרות אל isRoleAvailable() כדי לבדוק את הסטטוס של התפקיד.
  2. אם התפקיד 'הערות' זמין, קוראים לפונקציה createRequestRoleIntent() כדי לקבל הכוונה ספציפית להערות.
  3. התקשרות אל startActivityForResult() במטרה להציע למשתמש להקצות את תפקיד ההערות אפליקציה.

רק אפליקציה אחת יכולה להיות בתפקיד ההערות.

האפליקציה נפתחת בתגובה ל ACTION_CREATE_NOTE פעולת Intent. אם היא מופעלת ממסך הנעילה של המכשיר, האפליקציה נפתחת באופן מלא screen; אם הוא מופעל בזמן שהמסך לא נעול, בחלון צף.

קובץ מניפסט של אפליקציה

כדי לעמוד בדרישות לתפקיד ההערות, האפליקציה שלך צריכה לכלול את ההצהרה הבאה בקובץ המניפסט של האפליקציה:

<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 הפרמטר Intent נוסף מוגדר ל-true, האפליקציה צריכה לפתוח הערה שמקבלת סטיילוס (או קלט מגע).

אם ה-Intent הנוסף מוגדר לערך false, האפליקציה צריכה לפתוח הערה שמאשרת של קלט המקלדת.

גישה למסך הנעילה

האפליקציה צריכה לספק פעילות במסך מלא שפועלת כשהאפליקציה נפתח במסך הנעילה של המכשיר.

האפליקציה צריכה להציג הערות היסטוריות רק אם המשתמש הביע הסכמה (ב מכשיר לא נעול) להצגת הערות קודמות. אחרת, כשפותחים אותה דרך במסך הנעילה, האפליקציה תמיד צריכה ליצור הערה חדשה.

כדי לבדוק אם האפליקציה הופעלה במסך הנעילה, אפשר ללחוץ על KeyguardManager#isKeyguardLocked() כדי לבקש מהמשתמש לאמת את המכשיר ולבטל את הנעילה שלו, צריך להתקשר KeyguardManager#requestDismissKeyguard():

Kotlin

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

Java

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 כך שמשתמשים יוכלו ליצור הערות מרובות בכמה חלונות צפים, כשהאפליקציה לרישום הערות מופעלת במסך מלא או במסך מפוצל במצב תצוגה.

צילום תוכן

תיעוד תוכן הוא אחד מהכלים החשובים ביותר שמאפשרים רישום של הערות באפליקציות. עם תוכן לתעד, המשתמשים יכולים לצלם צילומי מסך של המסך מאחורי כתיבת ההערות. של החלון הצף של האפליקציה. המשתמשים יכולים לצלם את כל המסך או חלק ממנו, להדביק את בתוכן שלהם ולהוסיף הערות או הדגשה של התוכן שהוקלט.

האפליקציה לרישום הערות אמורה לספק ממשק משתמש נוח שמאפשר להפעיל ActivityResultLauncher נוצר על ידי registerForActivityResult() ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE פעולת ה-Intent ניתנת למרכז האפליקציות באופן ישיר או באמצעות ActivityResultContract

פעילות מערכת מתעדת את התוכן, שומרת אותו במכשיר ומחזירה את URI של תוכן לאפליקציה שלך בארגומנט הקריאה החוזרת של registerForActivityResult()

הדוגמה הבאה משתמשת בנוסחה כללית StartActivityForResult חוזה:

Kotlin

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")} }

Java

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));
        });
}

האפליקציה שלך צריכה לטפל בכל קודי התוצאות:

לאחר שצילום התוכן יצליח, הדביקו את התמונה שצולמה בפתק, דוגמה:

Kotlin

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

Java

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

יש לחשוף את התכונה לתיעוד תוכן דרך ממשק משתמש במחיר נוח רק כאשר אפליקציית רישום ההערות פועלת בחלון צף – לא כאשר פועל במסך מלא, מופעל ממסך הנעילה של המכשיר. (המשתמשים יכולים לקחת צילומי מסך של האפליקציה עצמה לכתיבת הערות עם צילום מסך מהמכשיר יכולות.)

כדי לקבוע אם האפליקציה נמצאת בחלון צף (או בועה), קוראים לפונקציה השיטות הבאות:

  • isLaunchedFromBubble() כדי לבדוק שאפליקציית רישום ההערות לא הופעלה במסך מלא מאת מסך הנעילה של המכשיר
  • isRoleHeld(RoleManager.ROLE_NOTES) כדי לוודא שהאפליקציה שלכם היא אפליקציית ברירת המחדל לכתיבת הערות (האפליקציה שלכם יכולה פועלות בשיחה או בבועה מסוג אחר אם האפליקציה לא מחזיקה את הערות)

מקורות מידע נוספים