Bagaimana Anda bisa menyaring aplikasi tertentu saat menggunakan maksud ACTION_SEND? Pertanyaan ini telah ditanyakan dalam berbagai cara, tetapi saya belum dapat mengumpulkan solusi berdasarkan jawaban yang diberikan. Semoga ada yang bisa membantu. Saya ingin memberikan kemampuan untuk berbagi dalam suatu aplikasi. Mengikuti saran Android Dev Alexander Lucas , saya lebih suka melakukannya dengan maksud dan tidak menggunakan API Facebook / Twitter.
Berbagi menggunakan maksud ACTION_SEND sangat bagus, tetapi masalahnya adalah (1) Saya tidak ingin setiap opsi berbagi di sana, saya lebih suka membatasinya untuk FB, Twitter, dan Email, dan (2) Saya tidak ingin berbagi hal yang sama untuk setiap aplikasi berbagi . Sebagai contoh, di share twitter saya, saya akan memasukkan beberapa menyebutkan dan tagar terbatas hingga 140 karakter atau kurang, sedangkan share facebook akan menyertakan link dan gambar fitur.
Apakah mungkin membatasi opsi untuk maksud ACTION_SEND (bagi-pakai)? Saya telah melihat sesuatu tentang menggunakan PackageManager dan queryIntentActivities, tetapi belum dapat menemukan koneksi antara PackageManager dan maksud ACTION_SEND.
ATAU
Daripada memfilter aplikasi berbagi, masalah saya juga dapat diselesaikan jika saya bisa menggunakan niat ACTION_SEND untuk langsung ke facebook atau twitter daripada muncul dialog. Jika itu masalahnya maka saya bisa membuat dialog sendiri dan ketika mereka mengklik "Facebook", buat maksud khusus Facebook dan kirimkan saja semuanya ke Facebook. Sama dengan Twitter.
ATAU apakah itu tidak mungkin? Apakah API Facebook dan Twitter satu-satunya cara?
sumber
Jawaban:
Sepengetahuan saya, StackOverflow memiliki banyak orang yang mengajukan pertanyaan ini dengan berbagai cara, tetapi belum ada yang menjawab sepenuhnya.
Spek saya meminta pengguna untuk dapat memilih email, twitter, facebook, atau SMS, dengan teks khusus untuk masing-masing. Inilah cara saya mencapai hal itu:
Saya menemukan sedikit cara melakukan ini di berbagai tempat, tetapi saya belum melihat semuanya di satu tempat di tempat lain.
Perhatikan bahwa metode ini juga menyembunyikan semua opsi konyol yang tidak saya inginkan, seperti berbagi melalui wifi dan bluetooth.
Semoga ini bisa membantu seseorang.
Sunting: Dalam komentar, saya diminta menjelaskan apa yang dilakukan kode ini. Pada dasarnya, ini
ACTION_SEND
HANYA menciptakan niat untuk klien email asli, lalu menempelkan maksud lain ke pemilih. Menjadikan email asli maksud khusus menghilangkan semua sampah tambahan seperti wifi dan bluetooth, lalu saya ambil maksud lain yang saya inginkan dari generikACTION_SEND
tipe teks biasa, dan menempelkannya sebelum menunjukkan pemilih.Ketika saya mengambil maksud tambahan, saya mengatur teks khusus untuk masing-masing.
Sunting2: Sudah beberapa saat sejak saya memposting ini, dan banyak hal telah berubah sedikit. Jika Anda melihat gmail dua kali dalam daftar opsi, coba hapus penanganan khusus untuk "android.gm" seperti yang disarankan dalam komentar oleh @h_k di bawah ini.
Karena jawaban yang satu ini adalah sumber dari hampir semua poin reputasi stackoverflow saya, saya harus setidaknya mencoba untuk tetap up to date.
sumber
Jika Anda ingin opsi khusus maka Anda tidak harus bergantung pada dialog default yang disediakan oleh android untuk tindakan ini.
Yang harus Anda lakukan adalah menggelar sendiri. Anda akan perlu menanyakan PackageManager di mana paket menangani tindakan yang Anda butuhkan dan kemudian berdasarkan balasan, Anda menerapkan pemfilteran dan teks yang disesuaikan.
Secara khusus, lihat metode queryIntentActivities dari kelas PackageManager . Anda membangun maksud yang akan meluncurkan dialog default (maksud ACTION_SEND), meneruskannya ke metode ini dan Anda akan menerima daftar objek yang berisi info tentang kegiatan yang dapat menangani maksud itu. Dengan itu, Anda dapat memilih yang Anda inginkan.
Setelah Anda membuat daftar paket yang ingin Anda presentasikan, Anda perlu membuat dialog daftar Anda sendiri (lebih disukai aktivitas dengan tema dialog) yang akan menampilkan daftar itu.
Satu hal yang perlu diperhatikan adalah sangat sulit untuk membuat dialog kustom tersebut terlihat seperti yang default. Masalahnya adalah bahwa tema yang digunakan dalam dialog itu adalah tema internal dan tidak dapat digunakan oleh aplikasi Anda. Anda dapat mencoba membuatnya mirip dengan yang asli seperti yang Anda inginkan atau menggunakan tampilan yang sepenuhnya khusus (banyak aplikasi melakukannya seperti aplikasi galeri dll.)
sumber
Coba yang ini untuk berbagi hanya tiga aplikasi-Facebook, Twitter, KakaoStory.
sumber
Menemukan solusi yang cocok untuk saya yang mencari di sini (lihat komentar ketiga pada jawaban pertama). Kode ini mencari klien twitter yang valid dan menggunakannya untuk memposting tweet. Catatan: Itu tidak memberi Anda Intent dengan berbagai klien Twitter dan memungkinkan Anda untuk memilih.
Bagikan menggunakan twitter:
Memanggil metode ini:
Facebook akan serupa dengan menggunakan " com.facebook.katana ", meskipun Anda masih tidak dapat mengatur teks pesan (usang Juli 2011).
Sumber kode: Maksud untuk membuka klien twitter di Android
sumber
Terima kasih kepada @dacoinminster. Saya membuat beberapa modifikasi pada jawabannya termasuk nama paket aplikasi populer dan pengurutan aplikasi tersebut.
sumber
Anda dapat mencoba kode di bawah ini, ini berfungsi dengan sempurna.
Di sini kami berbagi ke beberapa aplikasi tertentu, yaitu Facebook, Messenger, Twitter, Google Plus dan Gmail.
sumber
Solusi ini menunjukkan daftar aplikasi dalam dialog ListView yang menyerupai pemilih:
Terserah Anda untuk:
Kelas adaptor:
dan penggunaannya:
sumber
Cara terbersih adalah menyalin kelas berikut: ShareActionProvider, ActivityChooserView, ActivityChooserModel. Tambahkan kemampuan untuk memfilter maksud di ActivityChooserModel, dan metode dukungan yang sesuai di ShareActionProvider. Saya membuat kelas yang diperlukan, Anda dapat menyalinnya ke proyek Anda ( https://gist.github.com/saulpower/10557956 ). Ini tidak hanya menambah kemampuan untuk memfilter aplikasi yang ingin Anda bagikan (jika Anda tahu nama paket), tetapi juga untuk mematikan riwayat.
sumber
Saya telah meningkatkan jawaban @dacoinminster dan ini adalah hasil dengan contoh untuk membagikan aplikasi Anda:
sumber
Saya memiliki masalah yang sama dan solusi yang diterima ini tidak membantu saya, jika seseorang memiliki masalah yang sama Anda dapat menggunakan potongan kode saya :
sumber
sumber
Sangat sederhana dan ringkas. Terima kasih kepada pengembang Open source, cketti untuk berbagi solusi ini:
Dan ini adalah tautan ke intinya.
sumber