Not alma uygulaması oluştur

Not alma, Android'in büyük ekranlı cihazlarda kullanıcı üretkenliğini artıran temel bir özelliğidir. Not alma uygulamaları, kullanıcıların kayan bir pencerede veya tam ekranda yazı yazmasına ve çizim yapmasına, ekran içeriğini yakalamasına ve ek açıklama eklemesine, ayrıca notları daha sonra incelemek ve gözden geçirmek üzere kaydetmesine olanak tanır.

Kullanıcılar, kilit ekranından veya başka uygulamaları çalıştırırken not alma uygulamalarına erişebilir.

Not almak için ekran kalemi desteği olağanüstü bir kullanıcı deneyimi sağlar.

Notlar rolü

RoleManager.ROLE_NOTES rolü, not alma uygulamalarını tanımlar ve bu uygulamalara LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE izni verir.

Uygulamanızın notlar rolünü almak için aşağıdakileri yapın:

  1. Rolün durumunu kontrol etmek için isRoleAvailable() numaralı telefonu arayın.
  2. Notlar rolü kullanılabiliyorsa notlara özel bir amaç edinmek için createRequestRoleIntent() numaralı telefonu arayın.
  3. Kullanıcıdan uygulamanıza notlar rolü vermesini istemek için notlarla startActivityForResult() numaralı telefonu arayın.

Yalnızca bir uygulama notlar rolüne sahip olabilir.

Uygulama, dolaylı bir ACTION_CREATE_NOTE amaç işlemine yanıt olarak açılır. Cihaz kilit ekranından çağrılırsa uygulama tam ekran olarak açılır. Ekranın kilidi açıkken çağrılırsa kayan bir pencerede de açılır.

Uygulama manifesti

Uygulamanızın, notlar rolüne uygun olabilmesi için uygulama manifest dosyasında aşağıdaki beyanı içermesi gerekir:

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

Bildirim, kullanıcıların uygulamanıza not rolü atamasına olanak tanıyarak bu uygulamayı varsayılan not alma uygulaması yapar:

  • ACTION_CREATE_NOTE, uygulamanızın yanıt verdiği intent işlemini belirler

  • showWhenLocked, uygulamanızı cihazın kilit ekranından erişilebilir hale getirir

  • turnScreenOn, uygulama çalışırken uygulamanızın cihaz ekranını açabilmesini sağlar

Uygulama özellikleri

Büyük ekrana özel bir not alma uygulaması, not alma özelliklerini eksiksiz bir şekilde tamamlar.

Ekran kalemi desteği

Uygulamanız EXTRA_USE_STYLUS_MODE amaç ekstra true olarak ayarlandığında, uygulama ekran kalemi (veya parmakla dokunma) girişini kabul eden bir not açmalıdır.

Amaç ekstrası false olarak ayarlanırsa uygulamanız klavye girişini kabul eden bir not açmalıdır.

Kilit ekranı erişimi

Uygulamanız, cihaz kilit ekranından açıldığında çalışan bir tam ekran etkinlik sağlamalıdır.

Uygulamanız yalnızca kullanıcı geçmiş notların gösterilmesine izin verdiyse (cihaz kilidi açık durumdayken) geçmiş notları göstermelidir. Aksi takdirde, uygulamanız kilit ekranından açıldığında her zaman yeni bir not oluşturmalıdır.

Uygulamanızın kilit ekranından başlatılıp başlatılmadığını KeyguardManager#isKeyguardLocked() ile kontrol edebilirsiniz. Kullanıcıdan cihazın kimliğini doğrulamasını ve kilidini açmasını istemek için KeyguardManager#requestDismissKeyguard() numarasını arayın:

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

Kayan pencereler

Bağlamsal not almak için uygulamanızın, başka bir uygulama çalışırken kayan bir pencerede açılan bir etkinlik sağlaması gerekir.

Not alma uygulamanız tam ekran veya bölünmüş ekran modunda başlatıldığında bile kullanıcıların birden fazla kayan pencerede birden çok not oluşturabilmeleri için uygulamanızın multi-instance modunu desteklemesi gerekir.

İçerik yakalama

İçerik yakalama, not alma uygulamalarının temel özelliklerinden biridir. İçerik yakalama sayesinde kullanıcılar, not alma uygulamasının kayan penceresinin arkasındaki ekranın ekran görüntülerini alabilir. Kullanıcılar, ekranın tamamını veya bir kısmını yakalayabilir, içeriği notlarına yapıştırabilir ve yakalanan içeriğe açıklama ekleyebilir ya da bunları vurgulayabilir.

Not alma uygulamanız, registerForActivityResult() tarafından oluşturulan bir ActivityResultLauncher'i başlatan bir kullanıcı arayüzü sağlamalıdır. ACTION_LAUNCH_CAPTURE_CONTENT_ACTIVITY_FOR_NOTE amaç işlemi, doğrudan veya ActivityResultContract aracılığıyla başlatıcıya sağlanır.

Sistem etkinliği içeriği yakalar, cihaza kaydeder ve registerForActivityResult() öğesinin geri çağırma bağımsız değişkeninde uygulamanıza içerik URI'sını döndürür.

Aşağıdaki örnekte genel bir StartActivityForResult sözleşmesi kullanılmaktadır:

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

Uygulamanız tüm sonuç kodlarını işleyecek:

İçerik yakalama işlemi başarılı olduğunda, yakalanan resmi nota yapıştırın. Örneğin:

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

İçerik yakalama özelliği, kullanıcı arayüzü olanaklarıyla yalnızca not alma uygulamanız kayan bir pencerede çalışırken gösterilmelidir. Tam ekran çalışırken ve cihazın kilit ekranından başlatıldığı zaman gösterilmemelidir. (Kullanıcılar, cihaz ekran görüntüsü özelliklerine sahip not alma uygulamasının ekran görüntülerini alabilir.)

Uygulamanızın kayan bir pencerede (veya balonda) olup olmadığını belirlemek için aşağıdaki yöntemleri çağırın:

Ek kaynaklar