Not alma uygulaması oluştur

Not alma, Android'in büyük ekranlı cihazlarda kullanıcı verimliliğini artıran temel bir özelliğidir. Not alma uygulamaları, kullanıcıların kayan bir pencerede veya tam ekranda yazma ve çizim yapma, ekran içeriğini yakalama ve açıklama ekleme, not kaydetme işlemlerini daha sonra incelemek ve gözden geçirmek için kaydetmelerini sağlar.

Kullanıcılar not alma uygulamalarına kilit ekranından veya başka uygulamaları çalıştırırken 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 iznini 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 özgü bir amaç için createRequestRoleIntent() numaralı telefonu arayın.
  3. Kullanıcıdan uygulamanıza notlar rolü vermesini istemek için notlarla birlikte startActivityForResult() numaralı telefonu arayın.

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

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

Uygulama manifesti

Notlar rolüne uygun olabilmesi için uygulamanızın 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>

Bu beyan, kullanıcıların uygulamanıza not rolü atamasına olanak tanıyarak uygulamanızı varsayılan not alma uygulaması yapar:

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

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

  • turnScreenOn, uygulama çalıştığında uygulamanızın cihaz ekranını açmasına olanak tanır.

Uygulama özellikleri

Farklı bir büyük ekranlı not alma uygulaması, not alma özelliklerini eksiksiz olarak tamamlar.

Ekran kalemi desteği

Uygulamanız EXTRA_USE_STYLUS_MODE intent ekstrası true olarak ayarlanmış şekilde çağrıldığında, uygulama ekran kalemi (veya parmakla dokunma) girişini kabul eden bir not açmalıdır.

Amaç ekstra false olarak ayarlanırsa uygulamanız klavye girişini kabul eden bir not açacaktı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ı göstermeye izin vermişse (cihaz kilidi açıkken) 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 kimlik doğrulamasını ve cihazın kilidini açmasını istemek için KeyguardManager#requestDismissKeyguard() numaralı telefonu 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 alma 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ılmış olsa bile kullanıcıların birden fazla kayan pencerede birden çok not oluşturabilmesi için uygulamanız multi-instance modunu desteklemelidir.

İç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 intent işlemi, başlatıcıya doğrudan veya bir ActivityResultContract aracılığıyla sağlanır.

Sistem etkinliği, içeriği yakalar, cihaza kaydeder ve registerForActivityResult() öğesinin geri çağırma bağımsız değişkenindeki içerik URI'sını uygulamanıza 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şlemelidir:

İç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ü aracılığıyla yalnızca not alma uygulamanız kayan bir pencerede çalışıyorsa gösterilmelidir (tam ekran çalışırken cihaz kilit ekranından başlatıldığı zaman değil). (Kullanıcılar cihaz ekran görüntüsü özelliklerini kullanarak 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:

  • Not alma uygulamanızın, cihaz kilit ekranından tam ekran olarak başlatılıp başlatılmadığını kontrol etmek için isLaunchedFromBubble()
  • Uygulamanızın varsayılan not alma uygulaması olduğunu doğrulamak için isRoleHeld(RoleManager.ROLE_NOTES) (uygulama, notlar rolüne sahip değilse uygulamanız bir görüşmede veya başka bir tür balonda çalışabilir)

Ek kaynaklar