2010-10-31 10 views
19

ऐप में एक इरादा फ़िल्टर है जो इसे ACTION_SEND इरादों के माध्यम से अन्य एप्लिकेशन में शेयर मेनू में दिखाई देने की अनुमति देता है। ऐप में ACTION_SEND और CreateChooser() का उपयोग करके एक शेयर मेनू भी है, और मेरा ऐप सूची में दिखाई देता है। चूंकि वे पहले से ही मेरे ऐप में हैं, इसलिए यह अजीब लगता है कि वे खुद को वापस साझा करने में सक्षम हैं।शेयर मेनू से अपना ऐप कैसे बाहर निकालें?

क्या मेरे ऐप से कॉल होने पर मेरे ऐप को सूची में शामिल नहीं होने का कोई तरीका है?

उत्तर

8

क्या मेरे ऐप से कॉल होने पर मेरे ऐप को सूची में शामिल नहीं होने का कोई तरीका है?

createChooser() के माध्यम से नहीं। आप PackageManager और queryIntentActivities() के माध्यम से अपना स्वयं का चयनकर्ता-जैसे संवाद बना सकते हैं और स्वयं को इस तरह से फ़िल्टर कर सकते हैं।

+0

यह वहाँ कुछ है कि में बनाया का उपयोग करना चाहिए मैं अपने फ़िल्टर्ड सूची वापस फ़ीड कर सकते हैं शेयर संवाद बनाने के लिए, या क्या मुझे सूची का उपयोग करके अपना खुद का संवाद बनाना है? यदि यह बाद वाला है तो आप एक संवाद में ऐप के आइकन कैसे दिखते हैं? धन्यवाद। – cottonBallPaws

+1

@littleFluffyKitty: आप अपने संवाद का उपयोग करेंगे (उदा।, 'AlertDialog.builder' और' setAdapter() ')। 'पैकेज प्रबंधक' आपको आइकन दे सकता है। Http://github.com/commonsguy/cw-advandroid/tree/master/Introspection/Launchalot/ – CommonsWare

+0

देखें, यह वास्तव में सहायक है। क्या आपके पास कोई सुझाव है जो मेरे ऐप के विरुद्ध queryIntentActivities() से लौटाई गई सूची की तुलना/फ़िल्टर करने का सबसे अच्छा तरीका है? मैं पैकेज नाम का उपयोग करने के बारे में सोच रहा था, लेकिन क्या एक बेहतर तुलना है? – cottonBallPaws

19

यहां आपका समाधान चला जाता है। क्या आप ctx.getPackageName() के साथ बदल सकते हैं "packageNameToExclude" अपनी खुद की ऐप्लिकेशन को बहिष्कृत करना चाहते हैं

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

यह मेरे लिए काम कर रहा है .. बस मुझे इस लक्षितShareIntents.remove (0) के बारे में एक सवाल है ... तुमने ऐसा क्यों किया? –

+1

क्योंकि आपको Chooser निर्माता विधि के लिए एक इरादा देने की आवश्यकता है और फिर अतिरिक्त इरादे को अतिरिक्त – Addev

+0

के रूप में जोड़ना काम नहीं करता है। यह अजीब शेयर लक्ष्य दिखाता है और कई ऐप्स सूची में प्रकट नहीं होते हैं। –

1

आप

Intent chooserIntent = Intent.createChooser(new Intent(), "Select app to share"); 
संबंधित मुद्दे