2012-02-12 7 views
0

первый раз - позвольте мне сказать, что я НЕ спрашиваю, как реализовать кнопку совместного доступа в моем приложении или что-то в этом роде. Я знаю все об использовании Intents и Intent Filters и т. Д.android - манипулирование меню «share»

что я спрашиваю об этом: есть ли способ получить доступ к меню «Поделиться» ? другими словами, мне бы хотелось создать приложение, которое отфильтровывает некоторые из служб, которые я никогда не использую, но я не хочу полностью удалять их с телефона.

Я пытался его поиск в Android API, но можно найти только информацию о получении вашего приложения, чтобы показать в меню или поставить кнопку «Отправить» в вашем приложении и т.д.

Будучи, что я до сих пор что-то вроде новичка-программиста, мне также интересно, есть ли у меня какой-то способ вынюхивать объекты API, которые создаются/используются при создании/отображении меню «Share»? Похоже, я мог сделать это в сеансе отладчика, но я не уверен, как это сделать.

Заранее спасибо. b

ответ

1

Ну, есть два способа обойти меню «Поделиться». Первый заключается в использовании

startActivity(Intent.createChooser(Intent, CharSequence) 

Но в данном случае я не знаю, как получить доступ к меню созданных акций, согом это отдельная деятельность. Однако, если вы хотите контролировать список отображаемых элементов общего доступа для вашего приложения, есть другой способ приблизиться к реализации элемента вашего общего меню. Посмотрите на этот фрагмент кода:

//Prepare an intent to filter the activities you need 
//Add a List<YourItemType> where you going to store the share-items 
List<YourItemType> myShareList = new List<YourItemType>; 

PackageManager packageManager = mContext.getPackageManager(); 
List<ResolveInfo> activities = packageManager.queryIntentActivities(intent, 0); 
int numActivities = activities.size(); 

for (int i = 0; i != numActivities; ++i) { 
    final ResolveInfo info = activities.get(i); 
    String label = info.loadLabel(packageManager).toString(); 

    //now you can check label or some other info and decide whether to add the item 
    //into your own list of share items 

    //Every item in your list should have a runnable which will execute 
    // proper share-action (Activity) 
    myShareList.add(new YourItemType(label, info.loadIcon(packageManager), new Runnable() 
    { 
     public void run() { 
      startResolvedActivity(intent, info); 
     } 
})); 

} 

Этот фрагмент кода показывает, как получить список мероприятий, которые в состоянии обработать запрос акций. Теперь вам нужно показать свой собственный интерфейс. Это зависит от вас, что вы собираетесь выбирать.

+0

спасибо Алекс, это ценная информация - но я думаю, что не совсем понял, что я пытаюсь сделать. Я не хочу фильтровать элементы «Поделиться» только в моем приложении - я бы хотел отфильтровать их во ВСЕХ приложениях! Я предполагаю, что это, вероятно, невозможно, так как каждое приложение реализует меню общего доступа внутри собственной песочницы, но я, на что я надеялся, - это какой-то крючок для пунктов меню «Поделиться», встроенных в системный API, который позволит мне фильтровать и комбинировать элементы, отображаемые в этом списке - снова для * каждого * приложения. –

+0

также - я знаю, что в ICS вы можете реализовать код * в своем собственном приложении, что приведет к тому, что ваши более часто используемые элементы будут всплывать в верхней части меню «Поделиться» ... поэтому я подумал, что, возможно, способ прямого доступа к его свойствам. –

+0

Ах, я вижу. Я неправильно понял вашу «сборку приложения, которое отфильтровывает некоторые из сервисов, которые я никогда не использую». Ну, не могу быть уверен в этом, потому что я никогда не пробовал это сам. Но если список генерируется динамически на основе информации из диспетчера пакетов (я считаю, что это так), единственный способ, с помощью которого я могу манипулировать общим списком общего доступа, - работать с PackageManager. Однако, вкратце рассмотрев его API, я не вижу, как достичь вашей цели. Что касается предмета ICS: это звучит интересно - можете ли вы дать мне ссылку или что-то еще? –

Смежные вопросы