Genel niyetler

Niyet, bir uygulamayı nasıl kullanabileceğinizi açıklayarak yapmak istediğiniz işlem, örneğin "harita görüntüleme" veya "şu an resim", Intent nesnesinin içinde. Bu amaç türü bir uygulamayı belirtmediği için dolaylı intent olarak adlandırılır bileşen bileşeni başlar, ancak bunun yerine bir işlem belirtir ve işlemi gerçekleştirmek için gereken bazı verileri içerir.

startActivity() adlı kişiyi aradığınızda veya startActivityForResult() ve ona örtülü bir niyet iletirseniz, sistem çözümler bir uygulama için ilgili Activity. Birden fazla uygulama varsa işleyebilen bir iletişim kutusu gösterirse sistem, kullanılacak uygulamayı seçin.

Bu sayfada, bir eylemde bulunmak için kullanabileceğiniz amacı işleyen uygulama türüne göre düzenlenmiş yaygın işlemler. Her biri Bu bölümde, bir satın alma işlemini nasıl amaç filtre uygulayın.

Dikkat: Cihazda bunu yapabilecek uygulamalar yoksa örtülü bir intent alırsa (startActivity() çağrısı yapıldığında uygulama kilitlenir). Öncelikle niyeti almak için bir uygulama mevcut. Intent nesnenizde resolveActivity() komutunu çağırın. Sonuç null değilse en az bu amacı işleyebilen bir uygulamadır ve startActivity() adlı kişiyi çağırmak güvenlidir. Sonuç null, amacı kullanmayın ve mümkünse amaca hizmet eden bir özellik olduğunu unutmayın.

Amaç veya intent filtreleri oluşturmayı bilmiyorsanız önce Amaçlar ve Amaçlar Filtreler.

Bu sayfada listelenen amaçların, geliştirme aşamasında nasıl tetikleneceğini öğrenmek için Android Hata Ayıklama ile amaçları doğrulama Köprü bölümü.

Google Sesli İşlemler

Google Voice İşlemler, şunlara yanıt olarak bu sayfada listelenen amaçlardan bazılarını tetikler: sesli komutlar. Daha fazla bilgi için bkz. Sistem Sesli İşlemlerini Kullanmaya Başlama.

Çalar saat

İhtiyacınız olan bilgiler de dahil olmak üzere çalar saat uygulamalarıyla ilgili sık kullanılan işlemleri aşağıda bulabilirsiniz kullanarak uygulamanızın her bir işlemi yapma becerisini tanıtan bir intent filtresi oluşturun.

Alarm oluşturma

Google Sesli İşlemler

  • "sabah 7'ye alarm kur"

Yeni bir alarm oluşturmak için ACTION_SET_ALARM uygulamasını kullanın işlemi gerçekleştirebilir ve saat ve mesaj gibi alarm ayrıntılarını aşağıdaki ekstraları kullanarak belirleyebilirsiniz.

Not: Yalnızca saat, dakika ve mesaj ekstraları kullanılabilir. . Diğer ekstra özellikler platformu.

İşlem
ACTION_SET_ALARM
Veri URI'si
Yok
MIME Türü
Hiçbiri
'nı inceleyin.
Ekstralar
EXTRA_HOUR
Alarmın çalacağı saat.
EXTRA_MINUTES
Alarmın dakikaları.
EXTRA_MESSAGE
Alarmı tanımlamak için kullanılan özel bir mesaj.
EXTRA_DAYS
Bu alarmın her hafta gününü içeren ArrayList tekrarlanır. Her gün, Calendar içinden bir tam sayıyla tanımlanmalıdır sınıf, örneğin MONDAY.

Tek seferlik alarmlar için bu ekstra değeri belirtmeyin.

EXTRA_RINGTONE
Alarmla kullanılacak zil sesini veya zil sesi olmadığında VALUE_RINGTONE_SILENT belirten bir content: URI.

Varsayılan zil sesini kullanmak için bu ekstra zil sesini belirtmeyin.

EXTRA_VIBRATE
Bu alarm için titreşip titreşmeyeceğini belirten bir boole değeri.
EXTRA_SKIP_UI
Yanıt veren uygulamanın, alarmı ayarlarken kullanıcı arayüzünü atlamasının gerekip gerekmediğini belirten boole değeri. Doğru değerine ayarlanırsa uygulamanın, onay kullanıcı arayüzünü atlaması ve belirtilen alarmı ayarlaması gerekir.

Örnek amaç:

Kotlin

fun createAlarm(message: String, hour: Int, minutes: Int) {
    val intent = Intent(AlarmClock.ACTION_SET_ALARM).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_HOUR, hour)
        putExtra(AlarmClock.EXTRA_MINUTES, minutes)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void createAlarm(String message, int hour, int minutes) {
    Intent intent = new Intent(AlarmClock.ACTION_SET_ALARM)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_HOUR, hour)
            .putExtra(AlarmClock.EXTRA_MINUTES, minutes);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
Not:

ACTION_SET_ALARM amacını çağırmak için uygulamanızın şunlara sahip olması gerekir: SET_ALARM izni:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_ALARM" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Zamanlayıcı oluştur

Google Sesli İşlemler

  • "5 dakikalık zamanlayıcı ayarla"

Geri sayım zamanlayıcı oluşturmak için ACTION_SET_TIMER işlemini kullanın ve zamanlayıcı belirtin süre gibi ayrıntılara yer verir.

Not: Bu amaç kullanılabilir Android 4.4 (API düzeyi 19) ve sonraki sürümlerde kullanılabilir.

İşlem
ACTION_SET_TIMER
Veri URI'si
Yok
MIME Türü
Hiçbiri
'nı inceleyin.
Ekstralar
EXTRA_LENGTH
Zamanlayıcının saniye cinsinden uzunluğu.
EXTRA_MESSAGE
Zamanlayıcıyı tanımlamak için kullanılan özel bir mesaj.
EXTRA_SKIP_UI
Yanıt veren uygulamanın, zamanlayıcıyı ayarlarken kullanıcı arayüzünü atlamasının gerekip gerekmediğini belirten boole değeri. Doğru değerine ayarlanırsa uygulamanın, onay kullanıcı arayüzünü atlaması ve belirtilen zamanlayıcıyı başlatması gerekir.

Örnek amaç:

Kotlin

fun startTimer(message: String, seconds: Int) {
    val intent = Intent(AlarmClock.ACTION_SET_TIMER).apply {
        putExtra(AlarmClock.EXTRA_MESSAGE, message)
        putExtra(AlarmClock.EXTRA_LENGTH, seconds)
        putExtra(AlarmClock.EXTRA_SKIP_UI, true)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void startTimer(String message, int seconds) {
    Intent intent = new Intent(AlarmClock.ACTION_SET_TIMER)
            .putExtra(AlarmClock.EXTRA_MESSAGE, message)
            .putExtra(AlarmClock.EXTRA_LENGTH, seconds)
            .putExtra(AlarmClock.EXTRA_SKIP_UI, true);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}
Not:

ACTION_SET_TIMER amacını çağırmak için uygulamanızın şunlara sahip olması gerekir: SET_ALARM izni:

<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SET_TIMER" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Tüm alarmları göster

Alarm listesini görmek için ACTION_SHOW_ALARMS düğmesini kullanın eyleme dökülebilir.

Bu amacı, öncelikli olarak sistem uygulamaları tarafından kullanıldığından çok fazla uygulama çağırmıyor olsa da çalar saat gibi çalışan tüm uygulamalar seçeneğini tıklayın ve mevcut alarmların listesini göstererek yanıt verin.

Not: Bu amaç kullanılabilir Android 4.4 (API düzeyi 19) ve sonraki sürümlerde kullanılabilir.

İşlem
ACTION_SHOW_ALARMS
Veri URI'si
Yok
MIME Türü
Hiçbiri
'nı inceleyin.

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SHOW_ALARMS" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Takvim

Etkinlik eklemek, takvim uygulamalarında sık kullanılan bir işlemdir. Uygulamanızın bu işlemi yapma becerisini tanıtmak için bilgilere daha ayrıntılı şekilde ulaşabilirsiniz.

Takvim etkinliği ekleme

Kullanıcının takvimine yeni bir etkinlik eklemek için ACTION_INSERT. eyleme geçin ve veri URI'sini şunu kullanarak belirtin: Events.CONTENT_URI. Ardından aşağıdaki ekstraları kullanarak çeşitli etkinlik ayrıntılarını belirtebilirsiniz.

İşlem
ACTION_INSERT
Veri URI'si
Events.CONTENT_URI
MIME Türü
"vnd.android.cursor.dir/event"
Ekstralar
EXTRA_EVENT_ALL_DAY
Bunun tüm gün süren bir etkinlik olup olmadığını belirten bir boole değeri.
EXTRA_EVENT_BEGIN_TIME
Etkinliğin başlangıç zamanı (dönemden bu yana geçen milisaniye sayısı).
EXTRA_EVENT_END_TIME
Etkinliğin bitiş zamanı (dönemden bu yana geçen milisaniye sayısı).
TITLE
Etkinliğin başlığı.
DESCRIPTION
Etkinlik açıklaması.
EVENT_LOCATION
Etkinlik yeri.
EXTRA_EMAIL
Davetlileri belirten e-posta adreslerinin virgülle ayrılmış listesi.

CalendarContract.EventsColumns sınıf.

Örnek amaç:

Kotlin

fun addEvent(title: String, location: String, begin: Long, end: Long) {
    val intent = Intent(Intent.ACTION_INSERT).apply {
        data = Events.CONTENT_URI
        putExtra(Events.TITLE, title)
        putExtra(Events.EVENT_LOCATION, location)
        putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)
        putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void addEvent(String title, String location, long begin, long end) {
    Intent intent = new Intent(Intent.ACTION_INSERT)
            .setData(Events.CONTENT_URI)
            .putExtra(Events.TITLE, title)
            .putExtra(Events.EVENT_LOCATION, location)
            .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, begin)
            .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, end);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.INSERT" />
        <data android:mimeType="vnd.android.cursor.dir/event" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Kamera

İhtiyacınız olan bilgiler de dahil olmak üzere, kamera uygulamalarıyla ilgili sık yapılan işlemler aşağıda verilmiştir. kullanarak uygulamanızın her bir işlemi yapma becerisini tanıtan bir intent filtresi oluşturun.

Bir resim veya video çekip geri gönderin

Bir kamera uygulamasını açıp bunun sonucunda ortaya çıkan fotoğraf veya videoyu almak için ACTION_IMAGE_CAPTURE ya da ACTION_VIDEO_CAPTURE işlemini kullanın. Ayrıca, eklemek istediğiniz URI konumunu da Örneğin, fotoğraf veya videoyu kaydetmek için EXTRA_OUTPUT bölümüne ekstra

İşlem
ACTION_IMAGE_CAPTURE veya
ACTION_VIDEO_CAPTURE
Veri URI Şeması
Yok
MIME Türü
Yok
Ekstralar
EXTRA_OUTPUT
Kamera uygulamasının fotoğrafı kaydettiği URI konumu veya video dosyası (Uri nesnesi olarak) yükleyin.

Kamera uygulaması başarıyla geri döndüğünde etkinliğinize odaklanır (diğer bir deyişle, uygulamanız onActivityResult() geri arama alır) fotoğraf veya videoya belirttiğiniz URI üzerinden erişebilir EXTRA_OUTPUT değerini kullanın.

Not: ACTION_IMAGE_CAPTURE kullandığınızda fotoğraf çekmek için kullanıyorsanız kamera da bir Intent sonucundaki fotoğrafın küçültülmüş kopyası veya küçük resmi, şu ada sahip fazladan bir alanda Bitmap olarak kaydedilir: "data".

Örnek amaç:

Kotlin

const val REQUEST_IMAGE_CAPTURE = 1
val locationForPhotos: Uri = ...

fun capturePhoto(targetFilename: String) {
    val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE).apply {
        putExtra(MediaStore.EXTRA_OUTPUT, Uri.withAppendedPath(locationForPhotos, targetFilename))
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == Activity.RESULT_OK) {
        val thumbnail: Bitmap = data.getParcelableExtra("data")
        // Do other work with full size photo saved in locationForPhotos.
        ...
    }
}

Java

static final int REQUEST_IMAGE_CAPTURE = 1;
static final Uri locationForPhotos;

public void capturePhoto(String targetFilename) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.withAppendedPath(locationForPhotos, targetFilename));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bitmap thumbnail = data.getParcelableExtra("data");
        // Do other work with full size photo saved in locationForPhotos.
        ...
    }
}

Android 12 (API düzeyi 31) veya sonraki sürümlerde çalışırken bunu yapmak için aşağıdaki intent örneğine bakın.

Örnek amaç:

Kotlin

val REQUEST_IMAGE_CAPTURE = 1

private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // Display error state to the user.
    }
}

Java

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    } catch (ActivityNotFoundException e) {
        // Display error state to the user.
    }
}
</section></div>

Aşağıdakiler dahil olmak üzere fotoğraf çekmek için bu amacın nasıl kullanılacağı hakkında daha fazla bilgi: çıkış konumu için uygun bir Uri oluşturma, Fotoğraf çekin veya Video çekin.

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.IMAGE_CAPTURE" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Bu niyeti işlerken etkinliğinizin gelen Intent içindeki EXTRA_OUTPUT ekstrayı kontrol etmesini sağlayın, ardından yakalanan görüntüyü veya videoyu konumu bu ekstra ile belirtildiğinden emin olun ve setResult() öğesini ekstra bir öğede sıkıştırılmış küçük resim içeren bir Intent ile çağırın. "data" adlı.

Hareketsiz görüntü modunda kamera uygulaması başlatma

Google Sesli İşlemler

  • "resim çek"

Bir kamera uygulamasını hareketsiz görüntü modunda açmak için INTENT_ACTION_STILL_IMAGE_CAMERA işlemini kullanın.

İşlem
INTENT_ACTION_STILL_IMAGE_CAMERA
Veri URI Şeması
Yok
MIME Türü
Yok
Ekstralar
Yok

Örnek amaç:

Kotlin

private fun dispatchTakePictureIntent() {
    val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
    try {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
    } catch (e: ActivityNotFoundException) {
        // Display error state to the user.
    }
}

Java

public void capturePhoto(String targetFilename) {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    intent.putExtra(MediaStore.EXTRA_OUTPUT,
            Uri.withAppendedPath(locationForPhotos, targetFilename));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.STILL_IMAGE_CAMERA" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Video modunda kamera uygulaması başlatma

Google Sesli İşlemler

  • "video kaydet"

Bir kamera uygulamasını video modunda açmak için INTENT_ACTION_VIDEO_CAMERA işlemini kullanın.

İşlem
INTENT_ACTION_VIDEO_CAMERA
Veri URI Şeması
Yok
MIME Türü
Yok
Ekstralar
Yok

Örnek amaç:

Kotlin

fun capturePhoto() {
    val intent = Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA)
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE)
    }
}

Java

public void capturePhoto() {
    Intent intent = new Intent(MediaStore.INTENT_ACTION_VIDEO_CAMERA);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.VIDEO_CAMERA" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Kişiler/kişiler uygulaması

İhtiyacınız olan bilgiler de dahil olmak üzere kişi yönetimi uygulamaları için sık kullanılan işlemler kullanarak uygulamanızın her bir işlemi yapma becerisini tanıtan bir intent filtresi oluşturun.

Kişi seçin

Kullanıcının bir kişi seçmesini ve uygulamanızın tüm iletişim bilgilerine erişmesini sağlamak için ACTION_PICK işlemini kullanın ve Contacts.CONTENT_TYPE.

onActivityResult() geri aramanıza iletilen Intent sonucu, Seçilen kişiye işaret eden content: URI'si. Yanıt Kişiler Sağlayıcı API'sini kullanarak söz konusu kişiyi okumak için uygulamanızın geçici izinleri uygulamanız READ_CONTACTS iznini içermiyor.

İpucu: Yalnızca belirli bir kişiye erişmeniz gerekiyorsa bilgileri (ör. telefon numarası veya e-posta adresi) Gmail'de belirli kişi verilerini seçin.

İşlem
ACTION_PICK
Veri URI Şeması
Yok
MIME Türü
Contacts.CONTENT_TYPE

Örnek amaç:

Kotlin

const val REQUEST_SELECT_CONTACT = 1

fun selectContact() {
    val intent = Intent(Intent.ACTION_PICK).apply {
        type = ContactsContract.Contacts.CONTENT_TYPE
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_SELECT_CONTACT)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {
        val contactUri: Uri = data.data
        // Do something with the selected contact at contactUri.
        //...
    }
}

Java

static final int REQUEST_SELECT_CONTACT = 1;

public void selectContact() {
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(ContactsContract.Contacts.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_CONTACT);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_CONTACT && resultCode == RESULT_OK) {
        Uri contactUri = data.getData();
        // Do something with the selected contact at contactUri.
        ...
    }
}

Kişi URI'sını edindikten sonra kişi ayrıntılarını nasıl alacağınız hakkında bilgi için Ayrıntıları alma hakkında bilgi edinin iletişim bilgileri kullanılabilir.

Bu amacı kullanarak kişi URI'sı aldığınızda genellikle gerekir READ_CONTACTS. kişinin görünen adı ve iletişim bilgileri gibi temel ayrıntılarını okuma izni kişinin yıldızlı olup olmadığı. Ancak belirli bir kişi hakkında daha ayrıntılı veriler okuma (ör. Google Merchant Center'a giriş yapmak için READ_CONTACTS gereklidir. izni gerekir.

Belirli kişi verilerini seç

Kullanıcının bir kişiden belirli bir bilgiyi seçmesini sağlamak için, örneğin telefon numarası, e-posta adresi veya başka bir veri türü, ACTION_PICK işlemi ve MIME türünü bir olarak belirtin şu içerik türlerinden birini seçin: Kişinin telefon numarasını almak için CommonDataKinds.Phone.CONTENT_TYPE.

Not: Birçok durumda, uygulamanızın READ_CONTACTS Belirli bir kişi hakkındaki belirli bilgileri görüntüleme izni.

Bir kişiden yalnızca bir veri türünü almanız gerekiyorsa bu teknik, Şuradan CONTENT_TYPE: ContactsContract.CommonDataKinds sınıfları şundan daha verimli: (önceki bölümde gösterildiği gibi) Contacts.CONTENT_TYPE kullanarak. Sonuç, doğrudan size Kişi Sağlayıcı'ya daha karmaşık bir sorgu göndermenize gerek kalmadan istenen verilere erişebilirsiniz.

onActivityResult() geri aramanıza iletilen Intent sonucu, Seçilen kişi verilerine işaret eden content: URI'si. Yanıt uygulamanızda READ_CONTACTS iznini içermese bile bu kişi verilerini okumak için gereken geçici izinler.

İşlem
ACTION_PICK
Veri URI Şeması
Yok
MIME Türü
CommonDataKinds.Phone.CONTENT_TYPE
Telefon numarası olan kişilerden seçim yapın.
CommonDataKinds.Email.CONTENT_TYPE
E-posta adresi olan kişilerden seçim yapın.
CommonDataKinds.StructuredPostal.CONTENT_TYPE
Posta adresi olan kişilerden seçin.

Veya diğer birçok CONTENT_TYPE değerinden biri ContactsContract altında.

Örnek amaç:

Kotlin

const val REQUEST_SELECT_PHONE_NUMBER = 1

fun selectContact() {
    // Start an activity for the user to pick a phone number from contacts.
    val intent = Intent(Intent.ACTION_PICK).apply {
        type = CommonDataKinds.Phone.CONTENT_TYPE
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == Activity.RESULT_OK) {
        // Get the URI and query the content provider for the phone number.
        val contactUri: Uri = data.data
        val projection: Array<String> = arrayOf(CommonDataKinds.Phone.NUMBER)
        contentResolver.query(contactUri, projection, null, null, null).use { cursor ->
            // If the cursor returned is valid, get the phone number.
            if (cursor.moveToFirst()) {
                val numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER)
                val number = cursor.getString(numberIndex)
                // Do something with the phone number.
                ...
            }
        }
    }
}

Java

static final int REQUEST_SELECT_PHONE_NUMBER = 1;

public void selectContact() {
    // Start an activity for the user to pick a phone number from contacts.
    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setType(CommonDataKinds.Phone.CONTENT_TYPE);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_SELECT_PHONE_NUMBER);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_SELECT_PHONE_NUMBER && resultCode == RESULT_OK) {
        // Get the URI and query the content provider for the phone number.
        Uri contactUri = data.getData();
        String[] projection = new String[]{CommonDataKinds.Phone.NUMBER};
        Cursor cursor = getContentResolver().query(contactUri, projection,
                null, null, null);
        // If the cursor returned is valid, get the phone number.
        if (cursor != null && cursor.moveToFirst()) {
            int numberIndex = cursor.getColumnIndex(CommonDataKinds.Phone.NUMBER);
            String number = cursor.getString(numberIndex);
            // Do something with the phone number.
            //...
        }
    }
}

Bir kişiyi görüntüleme

Bilinen bir kişinin ayrıntılarını görüntülemek için ACTION_VIEW uygulamasını kullanın işlemine ve intent verisi olarak content: URI'sine sahip kişiyi belirtin.

Kişinin URI'sını ilk olarak almanın iki temel yolu vardır:

  • ACTION_PICK işleminin döndürdüğü kişi URI'sini kullanın ilgili reklam grubudur. Bu yaklaşım herhangi bir uygulama izni gerektirmez.
  • kişiler listesine ekleyin. Bu yaklaşım READ_CONTACTS gerektirir izni gerekir.
İşlem
ACTION_VIEW
Veri URI Şeması
content:<URI>
MIME Türü
Yok. Tür, kişi URI'sinden belirlenir.

Örnek amaç:

Kotlin

fun viewContact(contactUri: Uri) {
    val intent = Intent(Intent.ACTION_VIEW, contactUri)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void viewContact(Uri contactUri) {
    Intent intent = new Intent(Intent.ACTION_VIEW, contactUri);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Mevcut bir kişiyi düzenleme

Bilinen bir kişiyi düzenlemek için ACTION_EDIT aracını kullanın eylem, kişiyi bir content: URI ile belirtin amaç verileri olarak kullanmalı ve bilinen iletişim bilgilerini ContactsContract.Intents.Insert için sabit değerler.

Kişi URI'sini ilk olarak almanın iki temel yolu vardır:

  • ACTION_PICK işleminin döndürdüğü kişi URI'sini kullanın ilgili reklam grubudur. Bu yaklaşım herhangi bir uygulama izni gerektirmez.
  • kişiler listesine ekleyin. Bu yaklaşım READ_CONTACTS gerektirir izni gerekir.
İşlem
ACTION_EDIT
Veri URI Şeması
content:<URI>
MIME Türü
Tür, kişi URI'sinden belirlenir.
Ekstralar
ContactsContract.Intents.Insert içinde tanımlanan ekstralardan biri veya daha fazlası iletişim bilgileri alanlarını doldurabilirsiniz.

Örnek amaç:

Kotlin

fun editContact(contactUri: Uri, email: String) {
    val intent = Intent(Intent.ACTION_EDIT).apply {
        data = contactUri
        putExtra(ContactsContract.Intents.Insert.EMAIL, email)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void editContact(Uri contactUri, String email) {
    Intent intent = new Intent(Intent.ACTION_EDIT);
    intent.setData(contactUri);
    intent.putExtra(Intents.Insert.EMAIL, email);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Bir kişiyi düzenleme hakkında daha fazla bilgi için Değiştirme amaç kullanan kişilerdir.

Kişi ekle

Yeni bir kişi eklemek için ACTION_INSERT işlemini kullanın, Contacts.CONTENT_TYPE öğesini şu şekilde belirtin: ve bilinen iletişim bilgilerini ContactsContract.Intents.Insert için sabit değerler.

İşlem
ACTION_INSERT
Veri URI Şeması
Yok
MIME Türü
Contacts.CONTENT_TYPE
Ekstralar
ContactsContract.Intents.Insert içinde tanımlanan ek özelliklerden biri veya daha fazlası.

Örnek amaç:

Kotlin

fun insertContact(name: String, email: String) {
    val intent = Intent(Intent.ACTION_INSERT).apply {
        type = ContactsContract.Contacts.CONTENT_TYPE
        putExtra(ContactsContract.Intents.Insert.NAME, name)
        putExtra(ContactsContract.Intents.Insert.EMAIL, email)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void insertContact(String name, String email) {
    Intent intent = new Intent(Intent.ACTION_INSERT);
    intent.setType(Contacts.CONTENT_TYPE);
    intent.putExtra(Intents.Insert.NAME, name);
    intent.putExtra(Intents.Insert.EMAIL, email);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Kişi ekleme hakkında daha fazla bilgi için Değiştirme amaç kullanan kişilerdir.

E-posta

İsteğe bağlı ekler içeren bir e-posta oluşturmak, e-posta uygulamalarında sık yapılan bir işlemdir. Uygulamanızın bu işlemi yapma becerisini tanıtmak için bilgilere daha ayrıntılı şekilde ulaşabilirsiniz.

İsteğe bağlı ekleri olan bir e-posta oluşturma

E-posta oluşturmak için ek ekleyip eklemeyeceğinize bağlı olarak aşağıdaki işlemlerden birini yapın, ve listelenen ek anahtarları kullanarak alıcı ve konu gibi e-posta ayrıntılarını ekleyin.

İşlem
ACTION_SENDTO (ek olmadığında) veya
ACTION_SEND (bir ek için) veya
ACTION_SEND_MULTIPLE (birden çok ek için)
Veri URI Şeması
Yok
MIME Türü
"text/plain"
"*/*"
Ekstralar
Intent.EXTRA_EMAIL
Tüm "To" işaretlerini içeren bir dize dizisi alıcı e-posta adresleri.
Intent.EXTRA_CC
Tüm "CC"leri içeren bir dize dizisi alıcı e-posta adresleri.
Intent.EXTRA_BCC
Tüm "BCC"leri içeren bir dize dizisi alıcı e-posta adresleri.
Intent.EXTRA_SUBJECT
E-posta konusunu içeren bir dize.
Intent.EXTRA_TEXT
E-postanın gövdesini içeren bir dize.
Intent.EXTRA_STREAM
Eki gösteren bir Uri. ACTION_SEND_MULTIPLE. Bu, onun yerine bir ArrayList içeren birden çok Uri nesnesi.

Örnek amaç:

Kotlin

fun composeEmail(addresses: Array<String>, subject: String, attachment: Uri) {
    val intent = Intent(Intent.ACTION_SEND).apply {
        type = "*/*"
        putExtra(Intent.EXTRA_EMAIL, addresses)
        putExtra(Intent.EXTRA_SUBJECT, subject)
        putExtra(Intent.EXTRA_STREAM, attachment)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void composeEmail(String[] addresses, String subject, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setType("*/*");
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Niyetinizin bir web sitesi tarafından değil, yalnızca bir e-posta uygulaması tarafından işlendiğinden emin olmak kısa mesaj veya sosyal medya uygulamasına gidin, ardından ACTION_SENDTO işlemini kullanın ve aşağıdaki örnekte gösterildiği gibi "mailto:" veri şemasını dahil edin:

Kotlin

fun composeEmail(addresses: Array<String>, subject: String) {
    val intent = Intent(Intent.ACTION_SENDTO).apply {
        data = Uri.parse("mailto:") // Only email apps handle this.
        putExtra(Intent.EXTRA_EMAIL, addresses)
        putExtra(Intent.EXTRA_SUBJECT, subject)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void composeEmail(String[] addresses, String subject) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setData(Uri.parse("mailto:")); // Only email apps handle this.
    intent.putExtra(Intent.EXTRA_EMAIL, addresses);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <data android:type="*/*" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.SENDTO" />
        <data android:scheme="mailto" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Dosya depolama

İhtiyaç duyduğunuz bilgileri de içeren dosya depolama uygulamaları için genel işlemler aşağıda verilmiştir kullanarak uygulamanızın her bir işlemi yapma becerisini tanıtan bir intent filtresi oluşturun.

Belirli bir dosya türünü alma

Kullanıcıdan doküman veya fotoğraf gibi bir dosya seçmesini istemek ve uygulamanız için ACTION_GET_CONTENT işlemini kullanın ve MIME türü. Uygulamanıza döndürülen dosya referansı, etkinliğinizin mevcut durumuna geçici Bu nedenle, dosyaya daha sonra erişmek isterseniz daha sonra okuyabileceğiniz bir kopyayı içe aktarmanız gerekir.

Bu amaç, kullanıcının süreçte yeni bir dosya oluşturmasına da olanak tanır. Örneğin, mevcut bir fotoğrafı seçmek yerine kullanıcı kamerayla yeni bir fotoğraf çekebilir.

onActivityResult() yönteminize teslim edilen sonuç amacı, dosyaya işaret eden bir URI'ye sahip verileri içerir. URI; http: URI, file: URI veya content: gibi herhangi bir şey olabilir. URI. Ancak, seçilebilir dosyaları yalnızca erişilebilir olanlarla sınırlamak istiyorsanız bir içerik sağlayıcıdan (content: URI) gelen ve openFileDescriptor(), ekle CATEGORY_OPENABLE kategorisini amacınıza uygun şekilde değiştirebilirsiniz.

Android 4.3 (API düzeyi 18) ve sonraki sürümlerde kullanıcının birden fazla dosya seçmesine izin verebilirsiniz. Amaca EXTRA_ALLOW_MULTIPLE, true olarak ayarlandı. Ardından, seçilen dosyaların her birine ClipData üzerinden erişebilirsiniz. nesne getClipData() tarafından döndürüldü.

İşlem
ACTION_GET_CONTENT
Veri URI Şeması
Yok
MIME Türü
Kullanıcının seçmesi gereken dosya türüne karşılık gelen MIME türü.
Ekstralar
EXTRA_ALLOW_MULTIPLE
Kullanıcının tek seferde birden fazla dosya seçip seçemeyeceğini belirten bir boole değeri.
EXTRA_LOCAL_ONLY
Döndürülen dosyanın doğrudan cihazınıza geri yükleyebilirsiniz.
Kategori (isteğe bağlı)
CATEGORY_OPENABLE
Yalnızca "açılabilir" öğe ayarını döndürmek için dosya akışı olarak temsil edilebilecek dosyalar openFileDescriptor() ile.

Fotoğraf çekme amacına örnek:

Kotlin

const val REQUEST_IMAGE_GET = 1

fun selectImage() {
    val intent = Intent(Intent.ACTION_GET_CONTENT).apply {
        type = "image/*"
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_GET)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_GET && resultCode == Activity.RESULT_OK) {
        val thumbnail: Bitmap = data.getParcelableExtra("data")
        val fullPhotoUri: Uri = data.data
        // Do work with photo saved at fullPhotoUri.
        ...
    }
}

Java

static final int REQUEST_IMAGE_GET = 1;

public void selectImage() {
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*");
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, REQUEST_IMAGE_GET);
    }
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_GET && resultCode == RESULT_OK) {
        Bitmap thumbnail = data.getParcelable("data");
        Uri fullPhotoUri = data.getData();
        // Do work with photo saved at fullPhotoUri.
        ...
    }
}

Fotoğraf döndürmek için örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.GET_CONTENT" />
        <data android:type="image/*" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- The OPENABLE category declares that the returned file is accessible
             from a content provider that supports OpenableColumns
             and ContentResolver.openFileDescriptor(). -->
        <category android:name="android.intent.category.OPENABLE" />
    </intent-filter>
</activity>

Belirli bir dosya türünü açma

Android'de çalışırken, ACTION_GET_CONTENT işlemini kullanarak uygulamanıza aktarmanız gereken bir dosyanın kopyasını almak yerine 4.4 veya sonraki sürümlerde, bunun yerine başka bir uygulama tarafından yönetilen bir dosyayı açmak için istekte bulunabilirsiniz: kullanarak ve bir MIME türü belirterek ACTION_OPEN_DOCUMENT işlemini yapabilirsiniz. Kullanıcının da uygulamanızın yazabileceği yeni bir doküman oluşturmasına izin vermek için bunun yerine ACTION_CREATE_DOCUMENT işlemini kullanın.

Örneğin, mevcut PDF dokümanları arasından seçim yaparak, ACTION_CREATE_DOCUMENT intent, kullanıcıların yeni doküman oluşturmak istedikleri yeri seçmelerine olanak tanır (ör. başka bir uygulamada) dokümanın depolama alanını yönetir. Daha sonra, uygulamanız yeni dokümanı yazabilir.

Amaç, onActivityResult() ACTION_GET_CONTENT işlemindeki değer, herhangi bir türde URI (ACTION_OPEN_DOCUMENT kaynaklı sonuç amacı) döndürür ve ACTION_CREATE_DOCUMENT, seçilen dosyayı her zaman DocumentsProvider tarafından desteklenen bir content: URI olarak belirtir. Tarayıcı openFileDescriptor() ve içeren dosya DocumentsContract.Document sütunundaki sütunları kullanarak ayrıntılarını sorgulayabilir.

Döndürülen URI, uygulamanıza dosyaya uzun vadeli okuma erişimi verir. yapabilirsiniz. ACTION_OPEN_DOCUMENT işlemi özellikle, uygulamanıza kopya oluşturmadan mevcut bir dosyayı okumak istediğinizde kullanışlıdır. bir dosyayı açıp düzenlemek istediğiniz zaman ekleyebilirsiniz.

Kullanıcının birden fazla dosya seçmesine izin vermek için Amaca EXTRA_ALLOW_MULTIPLE, true olarak ayarlandı. Kullanıcı yalnızca bir öğe seçerse öğeyi getData() üzerinden alabilirsiniz. Kullanıcı birden fazla öğe seçerse getData() null değerini döndürür ve bunun yerine ClipData içinden her öğeyi al getClipData() tarafından döndürülen nesnedir.

Not: Amacınız bir MIME türü belirtmelidir ve CATEGORY_OPENABLE kategorisini beyan etmesi gerekir. Eğer Bir MIME türü dizisi ekleyerek birden fazla MIME türü belirtebilirsiniz. EXTRA_MIME_TYPES ekstra - Bu durumda setType() - "*/*" aralığındaki birincil MIME türü.

İşlem
ACTION_OPEN_DOCUMENT veya
ACTION_CREATE_DOCUMENT
Veri URI Şeması
Yok
MIME Türü
Kullanıcının seçmesi gereken dosya türüne karşılık gelen MIME türü.
Ekstralar
EXTRA_MIME_TYPES
Uygulamanızın kullandığı dosya türlerine karşılık gelen bir MIME türü dizisi üzerine konuşacağız. Bu ekstrayı kullandığınızda birincil MIME türünü şurada ayarlamanız gerekir: setType() - "*/*".
EXTRA_ALLOW_MULTIPLE
Kullanıcının tek seferde birden fazla dosya seçip seçemeyeceğini belirten bir boole değeri.
EXTRA_TITLE
Belirtmek üzere ACTION_CREATE_DOCUMENT ile kullanım içindir baştaki dosya adı olabilir.
EXTRA_LOCAL_ONLY
Döndürülen dosyanın doğrudan cihazınıza geri yükleyebilirsiniz.
Kategori
CATEGORY_OPENABLE
Yalnızca "açılabilir" öğe ayarını döndürmek için dosya akışı olarak temsil edilebilecek dosyalar openFileDescriptor() ile.

Fotoğraf çekme amacına örnek:

Kotlin

const val REQUEST_IMAGE_OPEN = 1

fun selectImage2() {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
        type = "image/*"
        addCategory(Intent.CATEGORY_OPENABLE)
    }
    // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test.
    startActivityForResult(intent, REQUEST_IMAGE_OPEN)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_IMAGE_OPEN && resultCode == Activity.RESULT_OK) {
        val fullPhotoUri: Uri = data.data
        // Do work with full size photo saved at fullPhotoUri.
        ...
    }
}

Java

static final int REQUEST_IMAGE_OPEN = 1;

public void selectImage() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.setType("image/*");
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    // Only the system receives the ACTION_OPEN_DOCUMENT, so no need to test.
    startActivityForResult(intent, REQUEST_IMAGE_OPEN);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_OPEN && resultCode == RESULT_OK) {
        Uri fullPhotoUri = data.getData();
        // Do work with full size photo saved at fullPhotoUri.
        ...
    }
}

Üçüncü taraf uygulamaları ACTION_OPEN_DOCUMENT işlem. Bunun yerine, sistem amaç ve çeşitli uygulamalarda kullanılabilen tüm dosyaları birleşik bir kullanıcı arayüzünde görüntüler.

Uygulamanızın dosyalarını bu kullanıcı arayüzünde sağlamak ve diğer uygulamaların açmasına izin vermek için DocumentsProvider ve şunlar için bir intent filtresi ekleyin: PROVIDER_INTERFACE ("android.content.action.DOCUMENTS_PROVIDER"), aşağıdaki örnekte gösterildiği gibi:

<provider ...
    android:grantUriPermissions="true"
    android:exported="true"
    android:permission="android.permission.MANAGE_DOCUMENTS">
    <intent-filter>
        <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
    </intent-filter>
</provider>

Uygulamanız tarafından yönetilen dosyaları diğer uygulamalardan açılabilir hale getirme hakkında daha fazla bilgi için Depolama alanı erişim çerçevesini kullanarak dosyaları açma başlıklı makaleyi okuyun.

Yerel işlemler

Araç çağırmak, sık kullanılan yerel bir işlemdir. Uygulamanızın reklamını yapmak için bir intent filtresi oluşturun aşağıdaki bölümde yer alan bilgileri kullanarak bu işlemi gerçekleştirme olanağınız vardır.

Araç çağırma

Google Sesli İşlemler

  • "bana bir taksi bul"
  • "bana araba ara"

(Yalnızca Wear OS)

Bir taksi çağırmak için ACTION_RESERVE_TAXI_RESERVATION eyleme dökülebilir.

Not: Uygulamalar kullanıcıdan onay istemelidir yapmanız gerektiğini unutmayın.

İşlem
ACTION_RESERVE_TAXI_RESERVATION
Veri URI'si
Yok
MIME Türü
Yok
Ekstralar
Yok

Örnek amaç:

Kotlin

fun callCar() {
    val intent = Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void callCar() {
    Intent intent = new Intent(ReserveIntents.ACTION_RESERVE_TAXI_RESERVATION);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="com.google.android.gms.actions.RESERVE_TAXI_RESERVATION" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Haritalar

Haritada konum göstermek, harita uygulamaları için sık kullanılan bir işlemdir. Uygulamanızın bu işlemi yapma becerisini tanıtmak için bilgilere daha ayrıntılı şekilde ulaşabilirsiniz.

Bir konumu haritada gösterme

Bir haritayı açmak için ACTION_VIEW işlemini kullanın ve aşağıdaki şemalardan biriyle amaç verilerindeki konum bilgilerini sağlayın.

İşlem
ACTION_VIEW
Veri URI Şeması
geo:latitude,longitude
Haritayı belirtilen boylam ve enlemde görüntüleyin.

Örnek: "geo:47.6,-122.3"

geo:latitude,longitude?z=zoom
Haritayı belirtilen boylam ve enlemde, belirli bir yakınlaştırma düzeyinde gösterin. Yakınlaştırma düzeyi 1, tüm Dünya'yı belirtilen enlem,lng cinsinden ortalanmış olarak gösterir. En yüksek (en yakın) yakınlaştırma düzeyi 23'tür.

Örnek: "geo:47.6,-122.3?z=11"

geo:0,0?q=lat,lng(label)
Haritayı belirtilen boylam ve enlemde, dize etiketiyle gösterin.

Örnek: "geo:0,0?q=34.99,-106.61(Treasure)"

geo:0,0?q=my+street+address
"Açık adresim" bölümünün konumunu göster. Bu, belirli bir adres veya konum sorgusu olabilir.

Örnek: "geo:0,0?q=1600+Amphitheatre+Parkway%2C+CA"

Not: geo URI'sinde geçirilen tüm dizeler kodlanmalıdır. Örneğin, 1st & Pike, Seattle dizesi 1st%20%26%20Pike%2C%20Seattle. Dizedeki boşluklar %20 veya artı işareti (+) ile değiştirin.

MIME Türü
Yok

Örnek amaç:

Kotlin

fun showMap(geoLocation: Uri) {
    val intent = Intent(Intent.ACTION_VIEW).apply {
        data = geoLocation
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void showMap(Uri geoLocation) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(geoLocation);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:scheme="geo" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Müzik veya video

İhtiyacınız olan bilgiler de dahil olmak üzere müzik ve video uygulamalarıyla ilgili sık kullanılan işlemler aşağıda belirtilmiştir. kullanarak uygulamanızın her bir işlemi yapma becerisini tanıtan bir intent filtresi oluşturun.

Medya dosyası oynatma

Bir müzik dosyasını çalmak için ACTION_VIEW işlemini kullanın ve intent verilerinde dosyanın URI konumunu belirtin.

İşlem
ACTION_VIEW
Veri URI Şeması
file:<URI>
content:<URI>
http:<URL>
MIME Türü
"audio/*"
"application/ogg"
"application/x-ogg"
"application/itunes"
Veya uygulamanızın gerektirdiği diğer herhangi bir şey.

Örnek amaç:

Kotlin

fun playMedia(file: Uri) {
    val intent = Intent(Intent.ACTION_VIEW).apply {
        data = file
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void playMedia(Uri file) {
    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setData(file);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <data android:type="audio/*" />
        <data android:type="application/ogg" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Arama sorgusuna göre müzik çalma

Google Sesli İşlemler

  • "michael jackson billie jean'i çal"

Bir arama sorgusuna göre müzik çalmak için şunu kullanın: INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH intent. Bir uygulama etkinleşebilir kullanıcının müzik çalma komutuna karşılık vermek için bu amaca yönelik bir uygulamadır. Bunun için alıcı uygulama intent, mevcut içeriği belirtilen sorguyla eşleştirmek için envanterinde bir arama yapar ve içeriği oynatmaya başlar.

Bu amaca EXTRA_MEDIA_FOCUS dizesini ekleyin ekstra (amaçlanan arama modunu belirtir). Örneğin, arama modu, bir sanatçı adı veya şarkı adı aranıyor.

İşlem
INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
Veri URI Şeması
Yok
MIME Türü
Yok
Ekstralar
MediaStore.EXTRA_MEDIA_FOCUS (zorunlu)

Arama modunu gösterir: Kullanıcının belirli bir sanatçıyı, albümü, şarkıyı veya seçin. Çoğu arama modu ek ekstra özellikler gerektirir. Örneğin, kullanıcı belirli bir şarkıyı dinlemek istediğinde hedefte üç ek ekstra özellik olabilir: şarkı adı, sanatçı ve albüm. Bu amaç, şunlar için aşağıdaki arama modlarını destekler: her EXTRA_MEDIA_FOCUS değeri:

Tümü - "vnd.android.cursor.item/*"

Tüm müzikleri çal. Alıcı uygulama, akıllı seçime dayalı olarak biraz müzik çalar. Örneğin: kullanıcının dinlediği son oynatma listesi olarak ayarlanır.

Ekstra özellikler:

  • QUERY (gerekli): Boş dize. Bu ekstra, her zaman geriye dönük uyumluluk için sağlanır. Arama modları hakkında bilgi sahibi olmayan mevcut uygulamalar bu amacı yapılandırılmamış bir arama olarak işler.

Yapılandırılmamış - "vnd.android.cursor.item/*"

Yapılandırılmamış arama sorgusundan belirli bir şarkıyı, albümü veya türü çalabilirsiniz. Uygulamalar, Kullanıcının istediği içerik türünü belirleyemediğinde bu arama modunda dinlemenizi sağlar. Mümkün olduğunda daha spesifik arama modları kullanın.

Ekstra özellikler:

  • QUERY (gerekli): Herhangi bir kombinasyonu içeren dize sanatçı, albüm, şarkı adı veya tür.

Tür - Audio.Genres.ENTRY_CONTENT_TYPE

Belirli bir türde müziği çalma.

Ekstra özellikler:

  • "android.intent.extra.genre" (zorunlu): Tür.
  • QUERY (zorunlu): tür. Bu ekstra her zaman sağlanır geriye dönük uyumluluk için de kullanılabilir. Arama modları hakkında bilgi sahibi olmayan mevcut uygulamalar, yapılandırılmamış bir arama olarak görebiliriz.

Sanatçı: Audio.Artists.ENTRY_CONTENT_TYPE

Belirli bir sanatçının müziğini çal.

Ekstra özellikler:

  • EXTRA_MEDIA_ARTIST (gerekli): sanatçı.
  • "android.intent.extra.genre": tür.
  • QUERY (gerekli): türünü göre değişiklik gösterebilir. Bu ekstra özellik her zaman geriye dönük uyumluluk için sağlanır. Arama modları hakkında bilgi sahibi olmayan mevcut uygulamalar, bu niyeti yapılandırılmamış bir arayın.

Albüm - Audio.Albums.ENTRY_CONTENT_TYPE

Belirli bir albümden müzik çalın.

Ekstra özellikler:

  • EXTRA_MEDIA_ALBUM (gerekli): albüm.
  • EXTRA_MEDIA_ARTIST: sanatçı.
  • "android.intent.extra.genre": tür.
  • QUERY (gerekli): gerektiği gibidir. Bu ekstra özellik her zaman geriye dönük uyumluluk. Arama modlarından haberdar olmayan mevcut uygulamalar, bu amacı bir yapılandırılmamış arama.

Şarkı - "vnd.android.cursor.item/audio"

Belirli bir şarkıyı çalmak.

Ekstra özellikler:

  • EXTRA_MEDIA_ALBUM: albüm.
  • EXTRA_MEDIA_ARTIST: sanatçı.
  • "android.intent.extra.genre": tür.
  • EXTRA_MEDIA_TITLE (gerekli): Şarkı adı.
  • QUERY (gerekli): albüm, sanatçı, tür veya başlık. Bu ekstra her zaman geriye dönük uyumluluk Arama modları hakkında bilgi sahibi olmayan mevcut uygulamalar bunu işleyebilir. yapılandırılmamış bir arama olarak görür.

Oynatma listesi: Audio.Playlists.ENTRY_CONTENT_TYPE

.

Belirtilen bazı ölçütlerle eşleşen belirli bir oynatma listesini veya oynatma listesini oynatın ekstra özellikler içeriyor.

Ekstra özellikler:

  • EXTRA_MEDIA_ALBUM: albüm.
  • EXTRA_MEDIA_ARTIST: sanatçı.
  • "android.intent.extra.genre": tür.
  • "android.intent.extra.playlist": oynatma listesi.
  • EXTRA_MEDIA_TITLE: oynatma listesinin bulunduğu şarkının adı seçmeniz gerekir.
  • QUERY (gerekli): Herhangi bir kombinasyonu içeren dize şarkı listesi, sanatçı, tür, oynatma listesi veya başlık olabilir. Bu ekstra, her zaman geriye dönük uyumluluk için sağlanır. Arama modları hakkında bilgi sahibi olmayan mevcut uygulamalar bu amacı yapılandırılmamış bir arama olarak işler.

Örnek amaç:

Kullanıcı belirli bir sanatçının müziğini dinlemek isterse, bir arama uygulaması şu amaç güdü:

Kotlin

fun playSearchArtist(artist: String) {
    val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH).apply {
        putExtra(MediaStore.EXTRA_MEDIA_FOCUS, MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE)
        putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist)
        putExtra(SearchManager.QUERY, artist)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void playSearchArtist(String artist) {
    Intent intent = new Intent(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH);
    intent.putExtra(MediaStore.EXTRA_MEDIA_FOCUS,
                    MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE);
    intent.putExtra(MediaStore.EXTRA_MEDIA_ARTIST, artist);
    intent.putExtra(SearchManager.QUERY, artist);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.media.action.MEDIA_PLAY_FROM_SEARCH" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Etkinliğinizde bu niyeti ele alırken Gelen derslerde EXTRA_MEDIA_FOCUS ekstra Arama modunu belirlemek için Intent. Etkinliğiniz belirlendikten sonra kullanarak, o arama moduna ilişkin ek özelliklerin değerlerini okuyabilirsiniz. Daha sonra bu bilgiler sayesinde uygulamanız, envanterinde arama yaparak Arama sorgusuyla eşleşen içerik. Bu, aşağıdaki örnekte gösterilmektedir.

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    ...
    if (intent.action.compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) {

        val mediaFocus: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS)
        val query: String? = intent.getStringExtra(SearchManager.QUERY)

        // Some of these extras might not be available depending on the search mode.
        val album: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM)
        val artist: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST)
        val genre: String? = intent.getStringExtra("android.intent.extra.genre")
        val playlist: String? = intent.getStringExtra("android.intent.extra.playlist")
        val title: String? = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE)

        // Determine the search mode and use the corresponding extras.
        when {
            mediaFocus == null -> {
                // 'Unstructured' search mode (backward compatible)
                playUnstructuredSearch(query)
            }
            mediaFocus.compareTo("vnd.android.cursor.item/*") == 0 -> {
                if (query?.isNotEmpty() == true) {
                    // 'Unstructured' search mode.
                    playUnstructuredSearch(query)
                } else {
                    // 'Any' search mode.
                    playResumeLastPlaylist()
                }
            }
            mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Genre' search mode.
                playGenre(genre)
            }
            mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Artist' search mode.
                playArtist(artist, genre)
            }
            mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Album' search mode.
                playAlbum(album, artist)
            }
            mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0 -> {
                // 'Song' search mode.
                playSong(album, artist, genre, title)
            }
            mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0 -> {
                // 'Playlist' search mode.
                playPlaylist(album, artist, genre, playlist, title)
            }
        }
    }
}

Java

protected void onCreate(Bundle savedInstanceState) {
    //...
    Intent intent = this.getIntent();
    if (intent.getAction().compareTo(MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH) == 0) {

        String mediaFocus = intent.getStringExtra(MediaStore.EXTRA_MEDIA_FOCUS);
        String query = intent.getStringExtra(SearchManager.QUERY);

        // Some of these extras might not be available depending on the search mode.
        String album = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ALBUM);
        String artist = intent.getStringExtra(MediaStore.EXTRA_MEDIA_ARTIST);
        String genre = intent.getStringExtra("android.intent.extra.genre");
        String playlist = intent.getStringExtra("android.intent.extra.playlist");
        String title = intent.getStringExtra(MediaStore.EXTRA_MEDIA_TITLE);

        // Determine the search mode and use the corresponding extras.
        if (mediaFocus == null) {
            // 'Unstructured' search mode (backward compatible).
            playUnstructuredSearch(query);

        } else if (mediaFocus.compareTo("vnd.android.cursor.item/*") == 0) {
            if (query.isEmpty()) {
                // 'Any' search mode.
                playResumeLastPlaylist();
            } else {
                // 'Unstructured' search mode.
                playUnstructuredSearch(query);
            }

        } else if (mediaFocus.compareTo(MediaStore.Audio.Genres.ENTRY_CONTENT_TYPE) == 0) {
            // 'Genre' search mode.
            playGenre(genre);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Artists.ENTRY_CONTENT_TYPE) == 0) {
            // 'Artist' search mode.
            playArtist(artist, genre);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Albums.ENTRY_CONTENT_TYPE) == 0) {
            // 'Album' search mode.
            playAlbum(album, artist);

        } else if (mediaFocus.compareTo("vnd.android.cursor.item/audio") == 0) {
            // 'Song' search mode.
            playSong(album, artist, genre, title);

        } else if (mediaFocus.compareTo(MediaStore.Audio.Playlists.ENTRY_CONTENT_TYPE) == 0) {
            // 'Playlist' search mode.
            playPlaylist(album, artist, genre, playlist, title);
        }
    }
}

Yeni not

Not oluşturma, not alma uygulamalarında yaygın olarak kullanılan bir işlemdir. Uygulamanızın bu işlemi yapma becerisini tanıtmak için bilgilere daha ayrıntılı şekilde ulaşabilirsiniz.

Not oluşturma

Yeni bir not oluşturmak için ACTION_CREATE_NOTE işlemini kullanın ve aşağıdaki ekstra özellikleri kullanarak konu ve metin gibi not ayrıntılarını belirtin.

Not: Uygulamalar kullanıcıdan onay istemelidir yapmanız gerektiğini unutmayın.

İşlem
ACTION_CREATE_NOTE
Veri URI Şeması
Yok
MIME Türü
PLAIN_TEXT_TYPE
"*/*"
Ekstralar
EXTRA_NAME
Notun başlığını veya konusunu belirten bir dize.
EXTRA_TEXT
Notun metnini gösteren bir dize.

Örnek amaç:

Kotlin

fun createNote(subject: String, text: String) {
    val intent = Intent(NoteIntents.ACTION_CREATE_NOTE).apply {
        putExtra(NoteIntents.EXTRA_NAME, subject)
        putExtra(NoteIntents.EXTRA_TEXT, text)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void createNote(String subject, String text) {
    Intent intent = new Intent(NoteIntents.ACTION_CREATE_NOTE)
            .putExtra(NoteIntents.EXTRA_NAME, subject)
            .putExtra(NoteIntents.EXTRA_TEXT, text);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="com.google.android.gms.actions.CREATE_NOTE" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="*/*" />
    </intent-filter>
</activity>

Telefon

Arama başlatma, telefon uygulamaları için yaygın olarak kullanılan bir işlemdir. Uygulamanızın bu işlemi yapma becerisini tanıtmak için bilgilere daha ayrıntılı şekilde ulaşabilirsiniz.

Telefon araması başlatma

Telefon uygulamasını açıp bir telefon numarası çevirmek için ACTION_DIAL işlemini kullanın ve şunu kullanarak bir telefon numarası belirtin: aşağıdaki URI şemasını seçin. Telefon uygulaması açıldığında telefon numarası, Ayrıca kullanıcının telefon görüşmesini başlatmak için Ara düğmesine dokunması gerekir.

Google Sesli İşlemler

  • "555-5555'i ara"
  • "bob'u ara"
  • "sesli mesajı ara"

Doğrudan telefon araması yapmak için ACTION_CALL işlemini kullanın ve aşağıdaki URI şemasını kullanarak bir telefon numarası belirtin. Telefon uygulaması açıldığında telefon çağrısını başlatır. Kullanıcının Ara düğmesine dokunması gerekmez.

ACTION_CALL işlemi, Manifest dosyanız için CALL_PHONE izni:

<uses-permission android:name="android.permission.CALL_PHONE" />
İşlem
  • ACTION_DIAL - Çevirici veya telefon uygulamasını açar.
  • ACTION_CALL - Telefon çağrısı yapar ( CALL_PHONE izni)
Veri URI Şeması
  • tel:<phone-number>
  • voicemail:<phone-number>
MIME Türü
Yok

Geçerli telefon numaraları, başlıklı makaleyi IETF RFC 3966'da bulabilirsiniz. Geçerli örnekler arasında şunlar yer alır:

  • tel:2125551212
  • tel:(212) 555 1212

Telefon uygulamasının numara çeviricisi, şemaları normalleştirmede başarılıdır. Örneğin: telefon numaraları. Açıklanan şemanın proje yönetiminde Uri.parse() yöntemini çağırın. Bununla birlikte, bir şemayı denemediyseniz veya işlenebilir, Uri.fromParts() öğesini kullanın yöntemini kullanın.

Örnek amaç:

Kotlin

fun dialPhoneNumber(phoneNumber: String) {
    val intent = Intent(Intent.ACTION_DIAL).apply {
        data = Uri.parse("tel:$phoneNumber")
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void dialPhoneNumber(String phoneNumber) {
    Intent intent = new Intent(Intent.ACTION_DIAL);
    intent.setData(Uri.parse("tel:" + phoneNumber));
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

İhtiyacınız olan bilgiler de dahil olmak üzere, arama uygulamaları için genel işlemler şunlardır: kullanarak uygulamanızın her bir işlemi yapma becerisini tanıtan bir intent filtresi oluşturun.

Belirli bir uygulamayı kullanarak arama yapma

Google Sesli İşlemler

  • "video uygulamamda kedi videoları ara"

Uygulamanız bağlamında arama özelliğini desteklemek için uygulamanızda şununla bir intent filtresi tanımlayın: SEARCH_ACTION işlemi, aşağıdaki intent filtresi örneğinde gösterildiği gibidir.

Not: Uygulama arama için SEARCH_ACTION kullanılması önerilmez. Bunun yerine GET_THING. Google Asistan'ın yerleşik uygulama içi desteğinden faydalanmak için harekete geçin. Daha fazla bilgi için bkz. Google Asistan Uygulama İşlemleri dokümanları.

İşlem
"com.google.android.gms.actions.SEARCH_ACTION"
Google Sesli İşlem'den gelen arama sorgularını destekleyin.
Ekstralar
QUERY
Arama sorgusunu içeren bir dize.

Örnek intent filtresi:

<activity android:name=".SearchActivity">
    <intent-filter>
        <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

Web araması gerçekleştirme

Web araması başlatmak için ACTION_WEB_SEARCH işlemini kullanın ve arama dizesini SearchManager.QUERY ekstra.

İşlem
ACTION_WEB_SEARCH
Veri URI Şeması
Yok
MIME Türü
Yok
Ekstralar
SearchManager.QUERY
Arama dizesi.

Örnek amaç:

Kotlin

fun searchWeb(query: String) {
    val intent = Intent(Intent.ACTION_WEB_SEARCH).apply {
        putExtra(SearchManager.QUERY, query)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void searchWeb(String query) {
    Intent intent = new Intent(Intent.ACTION_WEB_SEARCH);
    intent.putExtra(SearchManager.QUERY, query);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Ayarlar

Uygulamanızda kullanıcının bir değişiklik yapması gerektiğinde sistem Ayarlar uygulamasında bir ekran açmak için: aşağıdaki intent işlemlerinden birini kullanın:

İşlem
ACTION_SETTINGS
ACTION_WIRELESS_SETTINGS
ACTION_AIRPLANE_MODE_SETTINGS
ACTION_WIFI_SETTINGS
ACTION_APN_SETTINGS
ACTION_BLUETOOTH_SETTINGS
ACTION_DATE_SETTINGS
ACTION_LOCALE_SETTINGS
ACTION_INPUT_METHOD_SETTINGS
ACTION_DISPLAY_SETTINGS
ACTION_SECURITY_SETTINGS
ACTION_LOCATION_SOURCE_SETTINGS
ACTION_INTERNAL_STORAGE_SETTINGS
ACTION_MEMORY_CARD_SETTINGS

Kullanılabilen ek ayar ekranları için Settings dokümanlarına bakın .

Veri URI Şeması
Yok
MIME Türü
Yok

Örnek amaç:

Kotlin

fun openWifiSettings() {
    val intent = Intent(Settings.ACTION_WIFI_SETTINGS)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void openWifiSettings() {
    Intent intent = new Intent(Settings.ACTION_WIFI_SETTINGS);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Kısa mesaj kullanımı

Ek içeren bir SMS/MMS mesajı oluşturmak, kısa mesaj uygulamalarında sıkça kullanılan bir işlemdir. Uygulamanızın bu işlemi yapma becerisini tanıtmak için bilgilere daha ayrıntılı şekilde ulaşabilirsiniz.

Ek içeren bir SMS/MMS mesajı oluştur

SMS veya MMS kısa mesajı başlatmak için aşağıdaki intent işlemlerinden birini kullanın ve mesajı belirtin telefon numarası, konu ve e-posta mesajı gibi ayrıntıları seçmek için aşağıdaki ek tuşları kullanın.

İşlem
ACTION_SENDTO veya
ACTION_SEND veya
ACTION_SEND_MULTIPLE
Veri URI Şeması
sms:<phone_number>
smsto:<phone_number>
mms:<phone_number>
mmsto:<phone_number>

Bu şemaların tümü aynı şekilde yönetilir.

MIME Türü
"text/plain"
"image/*"
"video/*"
Ekstralar
"subject"
İleti konusuyla ilgili bir dize (genellikle yalnızca MMS için).
"sms_body"
Kısa mesaj için bir dize.
EXTRA_STREAM
Şu öğeyi gösteren bir Uri: resim veya video ekleyin. ACTION_SEND_MULTIPLE işlemini kullanıyorsanız bu ekstra bir ArrayList Eklenecek resimlere veya videolara işaret eden Uri nesne.

Örnek amaç:

Kotlin

fun composeMmsMessage(message: String, attachment: Uri) {
    val intent = Intent(Intent.ACTION_SENDTO).apply {
        type = HTTP.PLAIN_TEXT_TYPE
        putExtra("sms_body", message)
        putExtra(Intent.EXTRA_STREAM, attachment)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void composeMmsMessage(String message, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SENDTO);
    intent.setType(HTTP.PLAIN_TEXT_TYPE);
    intent.putExtra("sms_body", message);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Amacınızın başka bir kısa mesaj uygulaması tarafından değil, yalnızca bir kısa mesaj uygulaması tarafından işlendiğinden emin olmak e-posta veya sosyal medya uygulamaları ile paylaşım yapın, ardından ACTION_SENDTO işlemini kullanın ve aşağıdaki örnekte gösterildiği gibi "smsto:" veri şemasını dahil edin:

Kotlin

fun composeMmsMessage(message: String, attachment: Uri) {
    val intent = Intent(Intent.ACTION_SEND).apply {
        data = Uri.parse("smsto:")  // Only SMS apps respond to this.
        putExtra("sms_body", message)
        putExtra(Intent.EXTRA_STREAM, attachment)
    }
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void composeMmsMessage(String message, Uri attachment) {
    Intent intent = new Intent(Intent.ACTION_SEND);
    intent.setData(Uri.parse("smsto:"));  // Only SMS apps respond to this.
    intent.putExtra("sms_body", message);
    intent.putExtra(Intent.EXTRA_STREAM, attachment);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <data android:type="text/plain" />
        <data android:type="image/*" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

Not: SMS/MMS mesajlaşma uygulaması geliştiriyorsanız birkaç ek işlemde intent filtreleri uygulayarak Android 4.4 ve sonraki sürümlerde varsayılan SMS uygulaması. Daha fazla bilgi için belgelere göz atın Yer: Telephony.

Web tarayıcısı

Web URL'si yüklemek, web tarayıcısı uygulamalarının sıkça kullandığı bir işlemdir. Uygulamanızın bu işlemi yapma becerisini tanıtmak için bilgilere daha ayrıntılı şekilde ulaşabilirsiniz.

Web URL'si yükleme

Google Sesli İşlemler

  • "example.com'u aç"

Bir web sayfasını açmak için ACTION_VIEW işlemini kullanın ve intent verilerinde web URL'sini belirtin.

İşlem
ACTION_VIEW
Veri URI Şeması
http:<URL>
https:<URL>
MIME Türü
"text/plain"
"text/html"
"application/xhtml+xml"
"application/vnd.wap.xhtml+xml"

Örnek amaç:

Kotlin

fun openWebPage(url: String) {
    val webpage: Uri = Uri.parse(url)
    val intent = Intent(Intent.ACTION_VIEW, webpage)
    if (intent.resolveActivity(packageManager) != null) {
        startActivity(intent)
    }
}

Java

public void openWebPage(String url) {
    Uri webpage = Uri.parse(url);
    Intent intent = new Intent(Intent.ACTION_VIEW, webpage);
    if (intent.resolveActivity(getPackageManager()) != null) {
        startActivity(intent);
    }
}

Örnek intent filtresi:

<activity ...>
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <!-- Include the host attribute if you want your app to respond
             only to URLs with your app's domain. -->
        <data android:scheme="http" android:host="www.example.com" />
        <category android:name="android.intent.category.DEFAULT" />
        <!-- The BROWSABLE category is required to get links from web pages. -->
        <category android:name="android.intent.category.BROWSABLE" />
    </intent-filter>
</activity>

İpucu: Android uygulamanız web sitenize yönlendiren URL'ler için bir intent filtresi ekleyin. Ardından, Kullanıcılar uygulamanızı yüklemişlerse, e-postalardan veya web sitenize yönlendiren diğer web sayfalarından bağlantılar web sayfanız yerine Android uygulamanızı açın. Daha fazla bilgiyi şuradan edinebilirsiniz: Android App Links'i kullanma.

Android 12'den (API düzeyi 31) başlayarak genel bir web niyeti, Yalnızca uygulamanız belirli alan adı için onaylandıysa uygulamanızdaki etkinlik kontrol edilir. Uygulamanız alan adı için onaylanmazsa web intent, kullanıcının varsayılan tarayıcı uygulamasına çözümlenir.

Amaçları Android Debug Bridge ile doğrulayın

Uygulamanızın desteklemek istediğiniz amaçlara yanıt verdiğini doğrulamak için şunu kullanabilirsiniz: adb aracını kullanarak şunları yapabilirsiniz: şu:

  1. Android cihazı geliştirme için ayarlama veya sanal bir cihaz kullanın.
  2. Uygulamanızın desteklemek istediğiniz amaçları işleyen bir sürümünü yükleyin.
  3. adb kullanarak bir intent tetikleyin:
    adb shell am start -a <ACTION> -t <MIME_TYPE> -d <DATA> \
      -e <EXTRA_NAME> <EXTRA_VALUE> -n <ACTIVITY>
    

    Örnek:

    adb shell am start -a android.intent.action.DIAL \
      -d tel:555-5555 -n org.example.MyApp/.MyActivity
    
  4. Gerekli intent filtrelerini tanımlarsanız niyeti işleyin.

Daha fazla bilgi için bkz. Kabuk komutlarını yayınlama