כתיבת הערות היא תכונה מרכזית ב-Android שמשפרת את הפרודוקטיביות של משתמשים במכשירים עם מסך גדול. אפליקציות לרישום הערות מאפשרות למשתמשים לכתוב ולרשום בחלון צף או במסך מלא, לצלם את התוכן במסך ולהוסיף לו הערות, ולשמור את ההערות לבדיקה ותיקון מאוחר יותר.
המשתמשים יכולים לגשת לאפליקציות לרישום הערות ממסך הנעילה או תוך כדי הרצה של באפליקציות.
תמיכה בסטיילוס לכתיבת הערות מספקת חוויית משתמש יוצאת מן הכלל.
תפקיד ההערות
RoleManager.ROLE_NOTES
מזהה אפליקציות לרישום הערות ומעניק להן את התפקיד
LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE
הרשאה.
כדי לרכוש את תפקיד ההערות לאפליקציה:
- התקשרות אל
isRoleAvailable()
כדי לבדוק את הסטטוס של התפקיד. - אם התפקיד 'הערות' זמין, קוראים לפונקציה
createRequestRoleIntent()
כדי לקבל הכוונה ספציפית להערות. - התקשרות אל
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)); }); }
האפליקציה שלך צריכה לטפל בכל קודי התוצאות:
CAPTURE_CONTENT_FOR_NOTE_SUCCESS
CAPTURE_CONTENT_FOR_NOTE_FAILED
CAPTURE_CONTENT_FOR_NOTE_USER_CANCELED
CAPTURE_CONTENT_FOR_NOTE_WINDOW_MODE_UNSUPPORTED
CAPTURE_CONTENT_FOR_NOTE_BLOCKED_BY_ADMIN
לאחר שצילום התוכן יצליח, הדביקו את התמונה שצולמה בפתק, דוגמה:
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)
כדי לוודא שהאפליקציה שלכם היא אפליקציית ברירת המחדל לכתיבת הערות (האפליקציה שלכם יכולה פועלות בשיחה או בבועה מסוג אחר אם האפליקציה לא מחזיקה את הערות)