2016-09-01 2 views
0

У меня есть приложение, которое делится и получает изображения из других приложений. У меня есть две проблемы здесьCustom Sharing Dialog для других приложений

  • обмена изображениями с другого места, пусть говорят, из галереи мое приложение показывает, но всем своим именем пакета т.е. com.test.myapp вместо только с именем приложения

здесь манифеста его

<activity 
     android:name=".newdesign.SplashActivity" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.intent.action.SEND" /> 

      <category android:name="android.intent.category.DEFAULT" /> 

      <data android:mimeType="image/*" /> 
     </intent-filter> 
    </activity> 
  • Во-вторых, обмен ионный изображение из моего приложения я не хочу, чтобы отобразить свое собственное приложение в диалоге акций, но когда я удалить мое приложение я получаю некоторые unwan а также некоторые приложения с иконками по умолчанию для Android.

здесь код ОБМЕН

List<Intent> targetedShareIntents = new ArrayList<Intent>(); 
     Intent share = new Intent(android.content.Intent.ACTION_SEND); 
     share.setType("image/*"); 
     List<ResolveInfo> resInfo = ExportOrSaveActivity.this.getPackageManager().queryIntentActivities(createShareIntent(), 0); 
     if (!resInfo.isEmpty()) { 
      for (ResolveInfo info : resInfo) { 
       Intent targetedShare = createShareIntent(); 
       if (!info.activityInfo.packageName.equalsIgnoreCase("com.test.myapp1") && !info.activityInfo.packageName.equalsIgnoreCase("com.test.myapp2")) { 
        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[] {})); 
      startActivity(chooserIntent); 

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

ответ

0

Еще не уверен в первом вопросе, но нашел решение второй.

Вот код, чтобы создать собственный диалог с акциями в зависимости от того приложения вы хотите

final List<Item> items=new ArrayList<>(); 

     Intent audioIntent = new Intent(android.content.Intent.ACTION_SEND); 
     audioIntent.setDataAndType(Uri.parse("file://" + MainActivity.sSavedImagePath), "image/*"); 
     List<ResolveInfo> audio = ExportOrSaveActivity.this.getPackageManager().queryIntentActivities(audioIntent, 0); 
     for (ResolveInfo info : audio){ 
      String label = info.loadLabel(ExportOrSaveActivity.this.getPackageManager()).toString(); 
      Drawable icon = info.loadIcon(ExportOrSaveActivity.this.getPackageManager()); 
      String packageName = info.activityInfo.packageName; 
      String name = info.activityInfo.name; 
      Item ita=new Item(label , packageName ,icon); 
      if (!info.activityInfo.packageName.equalsIgnoreCase("com.package.toskip") && !info.activityInfo.packageName.equalsIgnoreCase("com.package.toskiptoo")) { 
       items.add(ita); 
      } 

     } 


     ListAdapter adapter = new ArrayAdapter<Item>(
       this, 
       android.R.layout.select_dialog_item, 
       android.R.id.text1, 
       items){ 
      public View getView(int position, View convertView, ViewGroup parent) { 
       //Use super class to create the View 
       View v = super.getView(position, convertView, parent); 
       TextView tv = (TextView)v.findViewById(android.R.id.text1); 

       //Put the image on the TextView 
       tv.setCompoundDrawablesWithIntrinsicBounds(items.get(position).icon, null, null, null); 

       //Add margin between image and text (support various screen densities) 
       int dp5 = (int) (5 * getResources().getDisplayMetrics().density + 0.5f); 
       tv.setCompoundDrawablePadding(dp5); 
       tv.setTextColor(R.color.black); 

       return v; 
      } 
     }; 


     new AlertDialog.Builder(ExportOrSaveActivity.this,android.R.style.Theme_Holo_Light) 
       .setTitle("Share Image") 
       .setAdapter(adapter, new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int item) { 
         Intent share = new Intent(Intent.ACTION_SEND); 
         share.setPackage(items.get(item).packagename); 
         share.setType("image/*"); 
         share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + MainActivity.sSavedImagePath)); 
         startActivity(share); 

        } 
       }).show(); 

Надеется, что это помочь другим, кто ищет какие-то вещи подобных.

0
public static Intent shareImage(Context context, String pathToImage) { 
    Intent shareIntent = new Intent(Intent.ACTION_SEND); 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) 
     shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
    else 
     shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT); 
    shareIntent.setType("image/*"); 
    // For a file in shared storage. For data in private storage, use a ContentProvider. 
    Uri uri = Uri.fromFile(context.getFileStreamPath(pathToImage)); 
    shareIntent.putExtra(Intent.EXTRA_STREAM, uri); 
    return shareIntent; 
} 

refer this http://android-developers.blogspot.com/2012/02/share-with-intents.html 
+0

«Обмениваться ими с моим приложением Я не хочу показывать собственное приложение в диалоговом окне« Как это помогает? –

+0

Вы используете на вашем Android AndroidManifest –

+0

Я уже опубликовал свой манифест. –