SORU
16 Mart 2012, Cuma


Nasıl ACTİON_SEND niyet (ve her uygulama için farklı bir metin kümesi)için özel uygulamaları filtrelemek için

Nasıl ACTİON_SEND niyet kullanırken belirli uygulamalar filtre EDEBİLİR MİSİN?Bu soru çeşitli şekillerde istendi, ama bir çözüm verilen yanıtlara göre toplamak mümkün olmamıştır. Umarım birileri yardımcı olabilir. Bir uygulama içinde paylaşma olanağı sağlamak istiyorum. Android Dev Alexander Lucas' advice aşağıdaki Bu niyet kullanarak ve Facebook/Twitter API kullanarak yapmayı tercih ederim.

Sharing using ACTION_SEND intent

Paylaşım ACTİON_SEND niyet kullanarak harika amasorun (1) istemiyorum her paylaşım seçeneği var, bence sınırı için FB, Twitter ve e-Posta, ve (2) istemiyorum pay aynı şey her paylaşım uygulaması. Benim twitter örneğin, bazı dahil edeceğim paylaş facebook paylaş bir bağlantı ve özelliği bir resim eklemek için devam ederken ve 140 karakter veya daha az sınırlı bahseder hashtags,.

ACTİON_SEND (paylaşma) niyet seçeneklerini sınırlamak mümkün mü? PackageManager ve queryİntentActivities kullanımı ile ilgili bir şey görmedim, ama PackageManager ve ACTİON_SEND niyet arasındaki bağlantıyı anlamaya mümkün olmamıştır.

YA

Paylaşım apps filtre yerine, benim sorunum da iletişim haşhaş yerine doğrudan facebook veya twitter gitmek ACTİON_SEND niyetine kullanabilir miyim çözülebilir. Eğer o zaman kendi iletişim oluşturmak ve ne zaman onlar "Facebook" Facebook-belirli bir niyet oluşturmak ve onları her şekilde Facebook göndermek. click durumda olsaydı Twitter ile aynı.

YA da mümkün değil mi? Facebook ve Twitter tek yolu API?

CEVAP
5 AĞUSTOS 2013, PAZARTESİ


Bildiğim kadarıyla StackOverflow insanlar çeşitli şekillerde bu soruyu soran çok var, ama kimse Henüz tamamen yanıtladı onu.

Benim spec kullanıcının her biri için e-posta, twitter, facebook, veya SMS, özel metin seçim yapabilmek için aradı. Bunu başardım.

public void onShareClick(View v) {
    Resources resources = getResources();

    Intent emailIntent = new Intent();
    emailIntent.setAction(Intent.ACTION_SEND);
    // Native email client doesn't currently support HTML, but it doesn't hurt to try in case they fix it
    emailIntent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(resources.getString(R.string.share_email_native)));
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.share_email_subject));
    emailIntent.setType("message/rfc822");

    PackageManager pm = getPackageManager();
    Intent sendIntent = new Intent(Intent.ACTION_SEND);     
    sendIntent.setType("text/plain");


    Intent openInChooser = Intent.createChooser(emailIntent, resources.getString(R.string.share_chooser_text));

    List<ResolveInfo> resInfo = pm.queryIntentActivities(sendIntent, 0);
    List<LabeledIntent> intentList = new ArrayList<LabeledIntent>();        
    for (int i = 0; i < resInfo.size(); i  ) {
        // Extract the label, append it, and repackage it in a LabeledIntent
        ResolveInfo ri = resInfo.get(i);
        String packageName = ri.activityInfo.packageName;
        if(packageName.contains("android.email")) {
            emailIntent.setPackage(packageName);
        } else if(packageName.contains("twitter") || packageName.contains("facebook") || packageName.contains("mms") || packageName.contains("android.gm")) {
            Intent intent = new Intent();
            intent.setComponent(new ComponentName(packageName, ri.activityInfo.name));
            intent.setAction(Intent.ACTION_SEND);
            intent.setType("text/plain");
            if(packageName.contains("twitter")) {
                intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_twitter));
            } else if(packageName.contains("facebook")) {
                // Warning: Facebook IGNORES our text. They say "These fields are intended for users to express themselves. Pre-filling these fields erodes the authenticity of the user voice."
                // One workaround is to use the Facebook SDK to post, but that doesn't allow the user to choose how they want to share. We can also make a custom landing page, and the link
                // will show the <meta content ="..."> text from that page with our link in Facebook.
                intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_facebook));
            } else if(packageName.contains("mms")) {
                intent.putExtra(Intent.EXTRA_TEXT, resources.getString(R.string.share_sms));
            } else if(packageName.contains("android.gm")) { // If Gmail shows up twice, try removing this else-if clause and the reference to "android.gm" above
                intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(resources.getString(R.string.share_email_gmail)));
                intent.putExtra(Intent.EXTRA_SUBJECT, resources.getString(R.string.share_email_subject));               
                intent.setType("message/rfc822");
            }

            intentList.add(new LabeledIntent(intent, packageName, ri.loadLabel(pm), ri.icon));
        }
    }

    // convert intentList to array
    LabeledIntent[] extraIntents = intentList.toArray( new LabeledIntent[ intentList.size() ]);

    openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
    startActivity(openInChooser);       
}

Çeşitli yerlerde bunun nasıl yapılacağı parçaları buldum, ama tek bir yerde hepsini başka bir yerde görmedim.

Bu yöntem de istemiyorum hepsi saçma seçenekleri, wifi ve bluetooth üzerinden paylaşma gibi gizler unutmayın.

Bu kimse yardımcı olur umarım.

Düzenleme: Bir yorum, bu kodun ne yaptığını açıklamak için istendi. Temelde, yerel e-posta istemcisi için ACTİON_SEND bir niyet, sonra chooser üzerine başka niyetleri teyel yaratıyor. Yapma asıl amacı e-posta özgü alır kurtulmak tüm ekstra önemsiz gibi wifi ve bluetooth, o zaman alayım diğer hedefleri istiyorum bir genel ACTİON_SEND tipi düz metin, ve tack önce bunları gösteren seçicisi.

Ek niyet yakalayınca, her biri için özel bir metin hazırladım.

Edit2:Bu ben yayınlanmıştır beri bir süre oldu, ve işler biraz değişti. Eğer iki seçenek listesinde gmail görüyorsanız, özel işleme çıkarma "android için deneyin gm" @h_k yorum aşağıda önerdi.

Bu bir cevap stackoverflow benim itibar puan neredeyse her şeyin kaynağı olduğundan, en azından bir tarih:) tutmaya çalışın

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MuscleProdigyTV

    MuscleProdig

    8 Ocak 2011
  • Tina Chen

    Tina Chen

    26 Mayıs 2012
  • Vsauce

    Vsauce

    30 Temmuz 2007