2013-03-21 3 views
0

Есть ли способ определить, какое приложение sharer выбрано при использовании поставщика акций, чтобы я мог отправлять разные сообщения для разных приложений? Я использую следующий метод для поставщика доля действия,Обнаружение приложения-распространителя при использовании поставщика действия с общим доступом

mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_item_share).getActionProvider(); 

     mShareActionProvider.setShareIntent(getDefaultShareIntent()); 

и намерения,

public Intent getDefaultShareIntent(){ 
       String message = Fname + Mobileno + Homeno + Workmail + Homemail 
       + Gtalk + Skype + Address + Company + Title + Website; 
     Intent shareIntent = new Intent(Intent.ACTION_SEND); 
       shareIntent.putExtra(Intent.EXTRA_TEXT, message); 


     return shareIntent; 


    } 

ответ

6

UPDATE:

Самое простое решение:

@Override 
public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { 
    String shareTarget = intent.getComponent().getPackageName(); 
    ... 
} 

Нет необходимости копировать файлы или что-нибудь.


Скопируйте некоторые файлы из любого источника Android, или ActionBarSherlock, если вы будете использовать последний:

  • ActivityChooserModel.java
  • ActivityChooserView.java
  • ShareActionProvider.java

Убедитесь, что вы ссылаетесь на эти файлы, а не на оригинальные приложения.

В ActivityChooserModel.java, это изменить:

if (mActivityChoserModelPolicy != null) { 
    ResolveInfo info = getActivity(index); 
    choiceIntent.putExtra("user_selected_activity", (info.activityInfo != null) ? info.activityInfo.packageName : info.serviceInfo.packageName); 
    final boolean handled = mActivityChoserModelPolicy.onChooseActivity(this, choiceIntent); 
    if (handled) 
    return null; 
} 

и он будет хранить имя пакета выбранной деятельности в умысел. Затем вы можете прочитать его в своем обработчике:

@Override 
public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { 
    String shareTarget = intent.getStringExtra("user_selected_activity"); 
    ... 
} 

и решить, что нужно обрабатывать по-разному в зависимости от выбранного действия.

+0

Спасибо .. я попробую это :-) –

+0

Но разработчики Android говорят, что изменение намерения не разрешено, и любые изменения в последнем будут проигнорированы. Для справки http://developer.android.com/reference/android/widget/ShareActionProvider.OnShareTargetSelectedListener.html#onShareTargetSelected%28android.widget.ShareActionProvider,%20android.content.Intent%29 – sandeepmaaram

+0

В этих случаях вы, как правило, не хотите изменить намерение самостоятельно, просто чтобы установить дополнительные настройки по-разному (например, отправьте HTML в приложения, которые его обрабатывают, текст тем, кто этого не делает). –

2

Не похоже. Но вам ничего не мешает вам копировать и вставлять его в свой проект и изменять его, как вы сочтете нужным.

+0

Могу я узнать, что вы пытались сказать? –

+0

Если вы установили «Источники для Android SDK» с помощью Android SDK Manager, вы можете щелкнуть правой кнопкой мыши ShareActionProvider и выбрать «Открыть объявление», чтобы увидеть исходный код. ShareActionProvider не делает ничего, что вы не можете сделать самостоятельно, поэтому, если вы хотите, чтобы вы могли скопировать и вставить код в свой собственный класс и изменить его. –

3

Попробуйте это.

myShareActionProvider.setOnShareTargetSelectedListener(new ShareActionProvider.OnShareTargetSelectedListener() { 
      @Override 
      public boolean onShareTargetSelected(ShareActionProvider source, Intent intent) { 
       String shareTarget = intent.getComponent().getPackageName(); 
       return false; 
      } 
     }); 
+0

Здесь мы работаем, но мы не можем изменить намерение здесь. Http://developer.android.com/reference/android/widget/ShareActionProvider.OnShareTargetSelectedListener.html#onShareTargetSelected%28android.widget.ShareActionProvider,%20android.content.Intent%29 – sandeepmaaram

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

  • Нет связанных вопросов^_^