2013-03-21 1 views
0

공유 작업 공급자를 사용할 때 어떤 공유기 응용 프로그램이 선택되어 다른 응용 프로그램에 대해 다른 메시지를 보낼 수 있는지 감지 할 수 있습니까? 나는 그것처럼 보이지 않는, 공유 액션 공급자에 대한 방법에 따라공유 작업 공급자를 사용할 때 공유기 응용 프로그램 감지

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(); 
    ... 
} 

파일 또는 아무것도를 복사 할 필요가 없습니다.


복사 안드로이드 소스, 또는 ActionBarSherlock의 하나에서 일부 파일, 당신은 후자의 사용 일 경우 :

  • ActivityChooserModel.java
  • ActivityChooserView.java
  • ShareActionProvider.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; 
} 

을하고는 의도로 선택한 활동의 ​​패키지 이름을 저장합니다 :

ActivityChooserModel.java 에서이 문제를 수정합니다. 그런 다음 처리기에서 읽을 수 있습니다.

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

선택한 활동에 따라 다르게 처리 할 항목을 결정하십시오.

+0

고마워요. ..i는 이것을 시도 할 것입니다 :-) –

+0

그러나 Android 개발자는 의도 수정은 허용되지 않으며 후자에 대한 변경 사항은 무시됩니다. 참조 용 http://developer.android.com/reference/android/widget/ShareActionProvider.OnShareTargetSelectedListener.html#onShareTargetSelected%28android.widget.ShareActionProvider,%20android.content.Intent%29 – sandeepmaaram

+0

이러한 경우 일반적으로 인 텐트 자체를 수정하고, 엑스트라를 다르게 설정하려는 경우 (예 : HTML을 처리하는 응용 프로그램에 HTML을 보내지 않는 사용자에게 텍스트 보내기). –

2

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

     mShareActionProvider.setShareIntent(getDefaultShareIntent()); 

과 의도를 사용하고 있습니다. 그러나 프로젝트에 복사하여 붙여 넣기를 중단하고 적절하게 수정하는 것을 막을 수있는 방법은 없습니다.

+0

내가 무슨 말을했는지 알 수 있습니까? –

+0

Android SDK 관리자를 사용하여 "Android SDK 용 소스"를 설치했다면 ShareActionProvider를 마우스 오른쪽 버튼으로 클릭하고 "Open Declaration"을 선택하여 소스 코드를 볼 수 있습니다. 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