Совместное использование изображения из веб-просмотра в WhatsApp

Я создал приложение, которое показывает несколько веб-страниц. Я хочу, чтобы это приложение делилось изображением, отображаемым на этой веб-странице, с WhatsApp и другими мессенджерами, для этого я добавил контекстное меню и реализовал ACTION_SEND, но это не сработало. Когда я пытаюсь поделиться изображением, возникает ошибка "Ошибка обмена, повторите попытку" Вот мой код

public class TopRatedFragment extends Fragment {
private ProgressBar progress;
private WebView myWebView2;
private Menu optionsMenu;

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_top_rated, container, false);


    String url = "http://images.google.com";
    myWebView2 = (WebView) rootView.findViewById(R.id.webViewTop);
    myWebView2.setWebChromeClient(new myWebViewClient());
    myWebView2.getSettings().setJavaScriptEnabled(true);
    progress = (ProgressBar) rootView.findViewById(R.id.progressBar3);
    progress.setMax(100);
    setHasOptionsMenu(true);
    myWebView2.loadUrl(url);


    myWebView2.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView View, String url) {
            View.loadUrl(url);
            TopRatedFragment.this.progress.setProgress(0);
            return true;
        }
    });
    myWebView2.setOnKeyListener(new android.view.View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                WebView webView = (WebView) v;

                switch (keyCode) {
                    case KeyEvent.KEYCODE_BACK:
                        if (webView.canGoBack()) {
                            webView.goBack();
                            return true;
                        }
                        break;
                }
            }

            return false;
        }
    });
    return rootView;

}

@Override
public void onCreateOptionsMenu(
        Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_main, menu);
    optionsMenu = menu;
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // handle item selection
    switch (item.getItemId()) {
        case R.id.airport_menuRefresh:

            TopRatedFragment.this.myWebView2.reload();
            setRefreshActionButtonState(true);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}


@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)
{
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.add(0, v.getId(), 0, "Call");
    menu.add(0, v.getId(), 0, "share image");
}
@Override
public boolean onContextItemSelected(MenuItem item){
    if(item.getTitle()=="Call"){
        Toast.makeText(getActivity(), "calling code", Toast.LENGTH_LONG).show();
    }
    else if(item.getTitle()=="share image")
        {

       // This is the code which i am using for share intent
        Intent share = new Intent(android.content.Intent.ACTION_SEND);
        share.setType("image/*");
        share.putExtra(Intent.EXTRA_STREAM, Uri.parse(Environment.getExternalStorageState()));
        startActivity(Intent.createChooser(share, "Share image using"));
    }else{
        return false;
    }
    return true;
}

Спасибо за вашу помощь!


person Rahul    schedule 26.04.2015    source источник


Ответы (1)


Эта линия выглядит странно

share.putExtra(Intent.EXTRA_STREAM, Uri.parse(Environment.getExternalStorageState()));

Дополнительный поток должен содержать uri изображения, которым вы хотите поделиться, но вы устанавливаете его на что-то, что я даже не понимаю, что он должен делать - это даже не будет оцениваться как uri. В настоящее время вы не предоставляете намерению никакой информации о том, КАКОЙ контент вы хотите отправить. Установите дополнительный поток на uri местоположения изображения, и все будет в порядке.

(Кстати, вы действительно должны сравнивать строки, используя equals(), а не ==. И вы не должны идентифицировать пункт меню в заголовках, так как это приведет к сбою при локализации и т. д. Используйте идентификатор пункта меню.)

person JHH    schedule 26.04.2015
comment
Можете ли вы привести мне один пример? Как добавить uri изображения на одну веб-страницу. - person Rahul; 26.04.2015
comment
Открыто ли изображение в веб-просмотре или открыт html-документ, содержащий изображение? Я думаю, в этом случае вам нужно проанализировать HTML для элемента img и получить src изображения. - person JHH; 26.04.2015
comment
Он открывается в веб-просмотре, а не в html-документе. Как я могу это сделать? - person Rahul; 26.04.2015
comment
Если изображение открыто в веб-просмотре, просто получите URL-адрес, используя webview.getUrl() - person JHH; 26.04.2015
comment
вместо Environment.getExternalStorageState()));? - person Rahul; 26.04.2015
comment
Да. Я понятия не имею, почему этот код вообще там. Это способ узнать, смонтирована ли SD-карта, как вы ожидали, что она будет передана в качестве URL-адреса для вашего намерения отправки...? - person JHH; 26.04.2015
comment
не работает не очень информативно. Что пойдет не так? Есть ли исключение? Дайте лог пожалуйста. - person JHH; 26.04.2015
comment
Вот журнал W/System.err(13486): java.io.FileNotFoundException: Нет поставщика содержимого: m .facebook.com/photo.php W/System.err(13486): at W/System.err(13486): android.content.ContentResolver.openTypedAssetFileDescriptor(ContentResolver.java:1066) t android.content. ContentResolver.openAssetFileDescriptor(ContentResolver.java:921) W/System.err(13486): at W/System.err(13486): android.content.ContentResolver.openInputStream(ContentResolver.java:646) W/System.err(13486) ): java.lang.Thread.run(Thread.java:818) - person Rahul; 26.04.2015
comment
Когда я пытаюсь поделиться изображением в WhatsApp, нет предварительного просмотра, просто пустой экран. - person Rahul; 26.04.2015