Android uygulamaları paylaş düğmesini nasıl uygular?


11

Android uygulamalarının ve Android'in paylaş düğmesini ve paylaşım mekanizmasını nasıl uyguladığını merak ediyordum. Örneğin, YouTube'daki paylaş düğmesine bastığımda, paylaşmak için paylaşılacak uygulamaların bir listesi açılır. Bu liste nasıl belirlenir? Belirli bir "paylaşım" amacı var mı ve sonra amaç ekstralarında sağlanan amaç türünü paylaşabilen tüm noktalar ortaya çıkıyor mu? Bunu uygulamak için kullanılan tasarım modelinin teknik adı nedir? Teşekkürler.


1
Gerçekten "kaka" demek mi, yoksa "pops" için bir yazım hatası mı? En azından Amerikan İngilizcesinde, birincisi bebeklerin çocuk bezlerine yaptığı şeydir.
JDługosz

Haklısın. Kısa süre önce Android'de Swype klavyesine geçtim, bu da daha hızlı yazmama izin veriyor, ancak bazen yanlış kelimeye giriyor ve fark etmiyorum. Bu konuda henüz ne yapacağımdan emin değilim, çok dikkatli bir insan değilim. Bazen alt ve ekran düzgün göremiyorum bile.
Jack Maddington

Denizaltında (denizaltı?)! Ne yapmalı: Göndermeden önce düzeltme. Ve tahmin listenizi utanç verici kelimelerle kirletmeyin.
JDługosz

Tesadüfi olarak tahmin listem, Swype'ın otomatik olarak okuyacağı eski e-postalardan gelen öğelerle dolu. Olmadı!
Jack Maddington

Yanıtlar:


10

Bunun iki kısmı vardır: iletişim uygulamalarının bir şeyleri paylaşabileceklerini söyleme mekanizması ve içerik barındıran uygulamaların paylaşma mekanizması. Onlarla birer birer ilgileneceğim, ama önce niyetler hakkında kısa bir not .

Intents

Niyet Android'de bir uygulamayı başlatmak için kullanılan budur. Kısayol veya Windows dosya ilişkilendirmesi gibi çalışabilir. Amaç, başlatılacak uygulamanın adını belirtebilir, ancak zorunlu değildir. Ayrıca, gerçekleştirilecek eylemi (örneğin, "ana etkinliğinizi açın", "bu URL'yi görüntüleyin", "bir takvim girişi oluşturun") ve üzerinde çalışacağı nesnenin MIME türünü (ör. Görüntülemek istediğiniz şey) belirtebilir. image / jpeg türündedir). Bazı işlem adları belirli bir uygulamaya özgüdür, ancak çoğu uygulamaların etkileşime girmesine izin vermek için Android tarafından standartlaştırılmıştır.

Amaç filtreleri ve iletişim uygulaması

Her uygulama, ne tür eylemler gerçekleştirebileceğini söylemek için amaç filtreleri belirtir . örneğin bir resim görüntüleyici uygulaması, MIME türünün "image / *" olduğu "bu URL'yi görüntüle" için bir niyet filtresi kaydeder; bir web tarayıcısı, URL düzeninin "http" veya "https" olduğu "bu URL'yi görüntüle" için bir niyet filtresi kaydeder. Bir şeyleri paylaşabilmek için, uygulama "gönderme" amacı için ya belirli bir türle (örneğin yalnızca fotoğrafları paylaşabilirse) ya da herhangi bir tür için bir amaç filtresi kaydeder.

İçerik uygulaması

Bazı içeriği paylaşmak isteyen uygulama, "paylaşma" işlemi ve paylaşılacak içeriği işaret eden bir URL ile bir niyet oluşturur. (Bu genellikle, alıcı uygulamaya içerik uygulamasının özel deposundaki dosyaya veya içerik uygulaması tarafından oluşturulan bir akışa geçici erişim sağlayan "geçici" bir URL'dir.) niyet. Ardından, bu amacı Android çerçevesine verir ve Android'den seçici iletişim kutusunu görüntülemesini ister . Android, amacı yüklü tüm uygulamalardaki amaç filtreleriyle karşılaştırır ve listeyi oluşturur ve kullanıcıya gösterir. Kullanıcı belirli bir uygulamayı seçtiğinde, Android bu uygulamayı başlatır ve niyetini iletir. Uygulama, içeriği orijinal uygulamadan almak için URL'yi kullanır.

Marshmallow'da Yeni: Doğrudan Paylaşım

Marshmallow'da Direct Share adında başka bir mekanizma var . Bu, doğrudan seçici iletişim kutusundan paylaşılacak kişileri veya grupları seçerek "kime göndermek istersiniz" ek adımını atlamanız için niyet mekanizmasını tamamlar. Bu biraz farklı çalışır: iletişim uygulaması bir hizmet sunmak zorundadır. İçeriğe sahip uygulama bir seçici istediğinde, Android ilgili her uygulama için hizmeti başlatır. Hizmet, ilgili paylaşım hedeflerinin bir listesini döndürür ve Android, tüm bu ayrı listeleri iletişim kutusunda gösterilen listeye birleştirir.


Ancak, uygulamaların birkaç farklı seçici iletişim kutusu gösterdiğini gördüm . Hepsi işletim sistemi tarafından gerçekten görüntüleniyor mu, yoksa uygulamanın kendisi bir hedef listesi alabilir mi?
user1686

@grawity Yerleşik iletişim kutusunun bazı özelleştirme seçenekleri vardır (örneğin başlığı ayarlamak için), ancak uygulamanın Android'den paylaşım hedefleri listesini istemesi ve kendi iletişim kutusuna koyması da mümkündür. Tarayıcı seçicim bURLy buna bir örnektir, ancak "gönderme" amacı yerine "açık URL" amacı ile.
Dan Hulme

11

Ben bir geliştirici değilim, bu yüzden sadece ham bir açıklama yapabilirim: uygulamalar Manifesthangi Mimetypes'i anladıklarını ve paylaşım eylemlerine yanıt vermeye istekli olduklarını beyan ederler . Bunun için "niyet filtreleri" olarak adlandırılırlar, örneğin:

<intent-filter>
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT"/>
    <data android:mimeType="application/*" />
    <data android:mimeType="audio/*" />
    <data android:mimeType="image/*" />
    <data android:mimeType="message/*" />
    <data android:mimeType="multipart/*" />
    <data android:mimeType="text/*" />
    <data android:mimeType="video/*" />
</intent-filter>

"Paylaş" düğmesine her bastığınızda, paylaşılacak içerik değerlendirilir ve biçimi almaya istekli olduklarını beyan eden uygulamalarla eşleştirilir.

Kaynaklar:


1
Hemen hemen bu kadar. Kendisi olan uygulama (paylaşımı yapıyor), niyet katılımcılarının bazılarını filtreleyebilir, ancak çoğu bunu yapmaz.
coteyr

2
@HiltonShumway bu yüzden cevabını iptal ettim. Benden başka, Dan gelişime uygun ve şeylerin nasıl birlikte gittiğini çok daha iyi biliyor. Cevabımı gönderdiğimde, o da bir tane yayınlayacağını umuyordum
umudumu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.