2010-10-31 13 views
19

Uygulamanın, ACTION_SEND amaçları aracılığıyla diğer uygulamalardaki paylaşım menüsünde görünmesine izin veren bir amaç filtresi vardır. Uygulamanın kendisi de ACTION_SEND ve createChooser() kullanarak bir paylaşma menüsüne sahiptir ve uygulamam listede görünür. Onlar zaten benim app içinde olduklarından, kendilerine geri paylaşabilmeleri için garip görünüyor.Kendi uygulamanızı Paylaşım menüsünden nasıl hariç tutabilirsiniz?

Uygulamam, uygulamamdan çağrılırsa listede görünmemenin bir yolu var mı?

cevap

8

Uygulamam, uygulamamdan çağrılırsa listede görünmemenin bir yolu var mı?

createChooser() aracılığıyla değil. PackageManager ve queryIntentActivities() aracılığıyla kendi seçici ayarlarınızı oluşturabilir ve kendinizi bu şekilde filtreleyebilirsiniz.

+0

Bu orada bir şey benim süzülmüş Listesini geri besleyebilir kullanmalıdır Share Dialog'u oluşturmak için, veya listeyi kullanarak kendi iletişimimi oluşturmam gerekir mi? Eğer ikincisiyse, App'in ikonlarının bir diyalogda görünmesini nasıl sağlayabilirsiniz? Teşekkürler. – cottonBallPaws

+1

@littleFluffyKitty: Kendi diyaloğunu (örn., 'AlertDialog.Builder' ve 'setAdapter()') kullanırdınız. 'PackageManager' size simgeleri verebilir. Http://github.com/commonsguy/cw-advandroid/tree/master/Introspection/Launchalot/ – CommonsWare

+0

adresine bakın, bu gerçekten faydalıdır. QueryIntentActivities() uygulamasından döndürülen listeyi uygulamamla karşılaştırmak/filtrelemenin en iyi yolu olan herhangi bir öneriniz var mı? Paket adını kullanmayı düşünüyordum, ama daha iyi bir karşılaştırma var mı? – cottonBallPaws

19

Çözümünüz gider. Eğer ctx.getPackageName() ile "packageNameToExclude" değiştirebilir kendi uygulamasını hariç olmak istiyorsanız

public static Intent shareExludingApp(Context ctx, String packageNameToExclude, String imagePath, String text) { 
    List<Intent> targetedShareIntents = new ArrayList<Intent>(); 
    Intent share = new Intent(android.content.Intent.ACTION_SEND); 
    share.setType("image/*"); 
    List<ResolveInfo> resInfo = ctx.getPackageManager().queryIntentActivities(createShareIntent(text,new File(imagePath)), 0); 
    if (!resInfo.isEmpty()) { 
     for (ResolveInfo info : resInfo) { 
      Intent targetedShare = createShareIntent(text,new File(imagePath)); 

      if (!info.activityInfo.packageName.equalsIgnoreCase(packageNameToExclude)) { 
       targetedShare.setPackage(info.activityInfo.packageName); 
       targetedShareIntents.add(targetedShare); 
      } 
     } 

     Intent chooserIntent = Intent.createChooser(targetedShareIntents.remove(0), 
       "Select app to share"); 
     chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, 
       targetedShareIntents.toArray(new Parcelable[] {})); 
     return chooserIntent; 
    } 
    return null; 
} 

private static Intent createShareIntent(String text, File file) { 
    Intent share = new Intent(android.content.Intent.ACTION_SEND); 
    share.setType("image/*"); 
    if (text != null) { 
     share.putExtra(Intent.EXTRA_TEXT, text); 
    } 
    share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); 
    return share; 
} 
+0

Bu benim için çalışıyor .. sadece bu targetedShareIntents.remove hakkında bir sorum var (0) ... bunu neden yaptın? –

+1

Chooser yaratıcısı yöntemine bir amaç vermeniz ve daha sonra ek bir – Addev

+0

olarak eklenmesi gerekir Çünkü işe yaramıyor. Garip paylaşım hedefleri gösterir ve listede pek çok uygulama görünmez. –

1

Bunu inşa

Intent chooserIntent = Intent.createChooser(new Intent(), "Select app to share"); 
İlgili konular