0

我创建了一个显示多个网页的应用程序。我希望该应用程序与 whatsapp 和其他 IM Messenger 共享显示在该网页上的图像,为此我添加了一个上下文菜单并实现了 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;
}

谢谢你的帮助!

4

1 回答 1

0

这条线看起来很奇怪

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

额外的流应该包含您要共享的图像的uri,但是您将其设置为我什至不明白它应该做什么-甚至不会评估为uri。目前,您没有向意图提供有关您要发送的内容的任何信息。将流额外设置为图像位置uri,你应该没问题。

(顺便说一句,你真的应该使用 equals() 而不是 == 来比较字符串。而且你不应该识别标题上的菜单项,因为它在本地化等时会失败。使用菜单项 id。)

于 2015-04-26T17:05:49.147 回答