В Android, как я могу поделиться изображением http в Twitter как твит из моего приложения - PullRequest
0 голосов
/ 28 сентября 2018

Я просмотрел много статей.Но почему-то я не смог достичь того, чего хотел.У меня есть ссылка на изображение http в моем приложении, и я хочу поделиться этим как приложением изображения из приложения Twitter.Я попытался следовать.Но, похоже, он не работает, так как Twitter ожидает, что это будет локальный URL.

TweetComposer.Builder builder = new TweetComposer.Builder(context)
                                    .text(text)
                                    .image(Uri.parse("https://dummyimage.com/300/09f/fff.png"));
                            builder.show();

Итак, теперь, когда я знаю, что для него требуется локальный путь, я попытался загрузить изображение на телефон, используя Picasso, как показано ниже.

Picasso.get().load(CONSTANT.IAMGE_URI + list.get(position).getEvent_model().getPhoto_link())
                        .placeholder(R.drawable.placeholder)
                        .error(R.drawable.placeholder)
                        .into(getTarget(list.get(position).getEvent_model().getPhoto_link()));

                File myImageFile = new File(getFileFullPath(list.get(position).getEvent_model().getPhoto_link()));
                Picasso.get().load(myImageFile).into(holder.iv_album_image);

И это код для получения цели.

private static Target getTarget(final String fileName) {
    Target target = new Target() {
        //This method in target is called by picasso when image downloaded
        @Override
        public void onBitmapLoaded(final Bitmap bitmap, Picasso.LoadedFrom from) {
            new Thread(new Runnable() {

                @Override
                public void run() {
                    try {
                        File file = new File(getFilename(fileName));
                        if (file.exists()) {
                            file.delete();
                        }
                        file.createNewFile();
                        FileOutputStream fileoutputstream = new FileOutputStream(file);
                        ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
                        bitmap.compress(Bitmap.CompressFormat.PNG, 60, bytearrayoutputstream);
                        fileoutputstream.write(bytearrayoutputstream.toByteArray());
                        fileoutputstream.close();
                    } catch (IOException e) {
                        Log.e("IOException", e.getLocalizedMessage());
                    }
                }
            }).start();

        }

        @Override
        public void onBitmapFailed(Exception e, Drawable errorDrawable) {

        }

        @Override
        public void onPrepareLoad(Drawable placeHolderDrawable) {

        }
    };
    return target;
}

public static String getFilename(String fileName) {
    File file = new File(Environment.getExternalStorageDirectory().getPath(), "Images");
    if (!file.exists()) {
        file.mkdirs();
    }
    return (file.getAbsolutePath() + "/" + fileName);
}

В этом случае фотография не загружается в просмотр изображений, а также не загружается в локальный.

1 Ответ

0 голосов
/ 28 сентября 2018

Вам необходимо загрузить изображение на телефон и использовать локальный путь.

https://docs.fabric.io/javadocs/tweet-composer/2.0.0/com/twitter/sdk/android/tweetcomposer/TweetComposer.Builder.html#image(android.net.Uri)

В конечном итоге для image :Uri должен быть файлом Uri для локального файла

Uri.fromFile(someExternalStorageFile)

Можете ли вы изменить свое имя getFile так, чтобы оно соответствовало такому:

public static String getFilename(String fileName, Context context) {
    int code = context.getPackageManager().checkPermission(
            android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
            context.getPackageName());
    if (code == PackageManager.PERMISSION_GRANTED) {
        File file = new File(Environment.getExternalStorageDirectory().getPath(), "Images");
        if (!file.exists()) {
            file.mkdirs();
        }
        return (file.getAbsolutePath() + "/" + fileName);
    }

    return "";
}

И устанавливать точку останова при каждом возврате.Я предполагаю, что вы возвращаетесь "";

...