2015-04-26 65 views
0

我创建了一个显示多个网页的应用程序。我希望该应用能够与WhatsApp和其他即时通讯工具共享该网页上显示的图像,因为我添加了一个上下文菜单并已实施ACTION_SEND,但无法正常工作。当我试图共享图像它给我的错误“分享失败请重试”这是我的代码将图像从webview共享到whatsapp

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

感谢您的帮助!

回答

0

这行看起来很奇怪

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

流额外应该包含的URI你要共享的图像,但你将它设置为东西,我甚至不明白它应该要做 - 这甚至不会评估为uri。 目前,您并未向意向提供任何关于您想要发送的内容的信息。设置额外的流到图像位置uri,你应该没问题。

(顺便说一句,你真的应该使用比较字符串的equals(),而不是==。你不应该在标题确定菜单项作为局部等时使用菜单项的ID,它会失败。)

+0

你能举个例子吗?我如何在一个网页上添加图片的uri。 – Rahul

+0

在web视图中打开图像还是包含打开图像的html文档?我想在这种情况下,你必须解析img元素的HTML并获取图像的src。 – JHH

+0

它在webview中打开,而不是在html文档中打开。我怎样才能做到这一点? – Rahul