2016-09-16 2 views
0

GovDic이라는 응용 프로그램에서 공유 기능을 만들었습니다. 그러나 공유 목록에서 응용 프로그램 자체가 나타났습니다. 공유에서 제외하는 방법은 무엇입니까?Android 공유 (ShareActionProvider)에서 응용 프로그램 자체를 제외하는 방법

다른 애플 리케이션에 공유 text/plain 콘텐츠가 필요, 다른 애플 리케이션이이 애플 리케이션에 text/plain 콘텐츠를 공유 할 수 있습니다.

매니페스트 :

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.comp548.govdic"> 

    ... 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     ... 

     <activity android:name=".OrgDetailActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.SEND" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <data android:mimeType="text/plain" /> 
      </intent-filter> 

      <meta-data android:name="android.support.PARENT_ACTIVITY" 
       android:value=".MainActivity"/> 
     </activity> 
    </application> 

</manifest> 

메뉴 :

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item android:id="@+id/menu_item_share" 
     app:showAsAction="ifRoom" 
     android:title="@string/share" 
     app:actionProviderClass="android.support.v7.widget.ShareActionProvider" /> 
</menu> 

활동

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate menu resource file. 
    getMenuInflater().inflate(R.menu.detail_menu, menu); 

    // Locate MenuItem with ShareActionProvider 
    MenuItem menuItem = menu.findItem(R.id.menu_item_share); 

    // Fetch and store ShareActionProvider 
    ShareActionProvider shareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem); 

    Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    shareIntent.setType(Constant.MIME_TYPE_TEXT_PLAIN); 
    shareIntent.putExtra(Intent.EXTRA_TEXT, etDescription.getText().toString()); 

    shareActionProvider.setShareIntent(shareIntent); 

    // Return true to display menu 
    return true; 
} 

enter image description here

답변

0

이 기능은 당신이 원하는 달성하는 데 도움이 될 수 있습니다. 나는 몇 가지 코드를 수정하고 근무

감사합니다 : 단지

public static void shareExludingApp(Context ctx, String packageNameToExclude, android.net.Uri imagePath, String text) { 

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

       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[]{})); 
      ctx.startActivity(chooserIntent); 
     } 

    } 

    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; 
    } 
2

안녕하세요 @의 user2299040 및 @Marcin ORLOWSKI 패키지 이름 통과

메뉴 :

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 

    <item android:id="@+id/menu_item_share" 
     app:showAsAction="ifRoom" 
     android:icon="@drawable/ic_share" 
     android:title="@string/share" /> 
</menu> 

활동

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate menu resource file. 
    getMenuInflater().inflate(R.menu.detail_menu, menu); 
    // Return true to display menu 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()){ 
     case R.id.menu_item_share: 
      Common.shareExcludingApp(this, "com.comp548.govdic", etDescription.getText().toString()); 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

공유 기능 :

public static void shareExcludingApp(Context ctx, String packageNameToExclude, String text) { 

    List<Intent> targetedShareIntents = new ArrayList<>(); 
    Intent share = new Intent(android.content.Intent.ACTION_SEND); 
    share.setType(Constant.MIME_TYPE_TEXT_PLAIN); 
    List<ResolveInfo> resInfo = ctx.getPackageManager().queryIntentActivities(createShareIntent(text), 0); 
    if (!resInfo.isEmpty()) { 
     for (ResolveInfo info : resInfo) { 
      Intent targetedShare = createShareIntent(text); 

      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[targetedShareIntents.size()])); 
     ctx.startActivity(chooserIntent); 
    } 

} 

private static Intent createShareIntent(String text) { 
    Intent share = new Intent(android.content.Intent.ACTION_SEND); 
    share.setType(Constant.MIME_TYPE_TEXT_PLAIN); 
    if (text != null) { 
     share.putExtra(Intent.EXTRA_TEXT, text); 
    } 
    return share; 
}