jeudi 14 mai 2015

Sharing only to google plus without photo

i fount many exampl where i can share image with installed android app like this:

shareIntent = ShareCompat.IntentBuilder
                            .from(getActivity())
                            .setType("image/*")
                            .setStream(imageUris.get(0))
                            .getIntent()             
                            .setPackage("com.google.android.apps.plus");
                    startActivity(shareIntent);

But now when i do that, i see Comlete action using selection: http://ift.tt/1EIe96W

Which is unacceptable fro my app. I want share only in goole plus. is it real share without google.photos? As a solution i find this code:

Intent shareIntent = new Intent();
    shareIntent
            .setAction(imageUris.size() > 1 ? Intent.ACTION_SEND_MULTIPLE
                    : Intent.ACTION_SEND);
    shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris);
    shareIntent.setType("image/*");
    PackageManager pm = context.getPackageManager();
    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.setAction(imageUris.size() > 1 ? Intent.ACTION_SEND_MULTIPLE
            : Intent.ACTION_SEND);
    sendIntent.setType("image/*");
    List<ResolveInfo> resInfo = pm.queryIntentActivities(sendIntent, 0);
    List<LabeledIntent> intentList = new ArrayList<LabeledIntent>();
    for (int i = 0; i < resInfo.size(); i++) {

        ResolveInfo ri = resInfo.get(i);
        String packageName = ri.activityInfo.packageName;

        if (packageName.equals("com.facebook.katana")) {
            shareIntent.setPackage(packageName);
            Log.e("NEW", "count   0");
        } else if (packageName.equals("com.google.android.apps.plus")

                || (packageName
                        .equals("com.yahoo.mobile.client.android.flickr") || packageName
                        .equals("com.twitter.android"))) {

            Intent intent = new Intent();
            intent.setComponent(new ComponentName(packageName,
                    ri.activityInfo.name));
            intent.setAction(imageUris.size() > 1 ? Intent.ACTION_SEND_MULTIPLE
                    : Intent.ACTION_SEND);
            intent.setType("image/*");
            if (packageName.equals("com.google.android.apps.plus")) {
                intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,
                        imageUris);
            } else if (packageName
                    .equals("com.yahoo.mobile.client.android.flickr")) {
                intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,
                        imageUris);
            } else if (packageName.equals("com.twitter.android")) {
                intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM,
                        imageUris);
            }

            intentList.add(new LabeledIntent(intent, packageName, ri
                    .loadLabel(pm), ri.icon)); 
        }

    }
    // removing google photos like in ios 
    for (int i = 0; i < intentList.size(); i++) {
        String a = intentList.get(i).getComponent().getClassName();
        if (a.contains("com.google.android.apps.photos")) {
            intentList.remove(i);
        }
    }
    // convert intentList to array
    LabeledIntent[] extraIntents = intentList
            .toArray(new LabeledIntent[intentList.size()]); 

    Intent openInChooser = Intent.createChooser(shareIntent, String.format(
            context.getString(R.string.format_share_photos),
            imageUris.size()));
    openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
    context.startActivity(openInChooser);

But i can share image (or images) only by facebook and can share image by any of intentList. Could some body help me or answer to my question. Thanks in advance

Aucun commentaire:

Enregistrer un commentaire