将 URL 从 WebView 传递给 ShareActionProvider?

Posted

技术标签:

【中文标题】将 URL 从 WebView 传递给 ShareActionProvider?【英文标题】:Passing URL from WebView to ShareActionProvider? 【发布时间】:2013-01-17 23:41:38 【问题描述】:

我想在我的 WebView 中获取用户所在的任何页面,并允许他们与 FaceBook/etc 共享 URL 作为 ACTION_SEND 意图。

我试过了,但显然 onCreateOptionsMenu 中不存在 URL。如何将其移至 onOptionsItemsSelected?

private ShareActionProvider mShareActionProvider;
@Override
public boolean onOptionsItemSelected(MenuItem item) 
    // TODO Auto-generated method stub


    return super.onOptionsItemSelected(item);

   @Override
public boolean onCreateOptionsMenu(Menu menu) 
     getMenuInflater().inflate(R.menu.activity_main, menu);
     MenuItem item = menu.findItem(R.id.menu_item_share);
     mShareActionProvider = (ShareActionProvider)item.getActionProvider();
     mShareActionProvider.setShareHistoryFileName(
       ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
     mShareActionProvider.setShareIntent(createShareIntent());
     return true;   

 private Intent createShareIntent() 
      Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("text/plain");
            shareIntent.putExtra(Intent.EXTRA_TEXT, 
          web.getUrl());
            return shareIntent;
        

【问题讨论】:

请注意,我的意思是将其传递给 onOptionsItemSelected 以便“url”有一个值(在页面加载后) 【参考方案1】:

上面的代码不起作用,因为onCreateOptionsMenu 只被调用一次,第一次显示选项菜单时。

解决这个问题很容易。当onOptionsItemSelected 被调用时,我们正在构建我们的意图。这是选择膨胀菜单的任何资源的时候。如果所选项目是共享资源,则执行shareURL,现在构建并启动 Intent。

@Override
public boolean onCreateOptionsMenu(Menu menu) 
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;


@Override
public final boolean onOptionsItemSelected(MenuItem item) 
    switch (item.getItemId()) 
        case R.id.menu_item_share:
            shareURL();
    
    return super.onOptionsItemSelected(item);


private void shareURL() 
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_TEXT, web.getUrl());
    startActivity(Intent.createChooser(shareIntent, "Share This!"));

我没有测试上面的代码示例。既不是在实际设备上,也不是在 Java 编译器上。不过,它应该可以帮助您解决问题。

【讨论】:

感谢您的回答!我明白你的意思,只是好奇底层意图是什么?我需要在其他地方创建这个吗?编辑:没关系,非常感谢! 对不起,我的错。意图 -> 共享意图

以上是关于将 URL 从 WebView 传递给 ShareActionProvider?的主要内容,如果未能解决你的问题,请参考以下文章

通过@JavascriptInterface将字符串从Android传递给WebView中的JS

将 iOS 事件传递给 Ionic/Capacitor webview

QT 5.8 Webview 如何进行请求以及如何拦截它?

通过 URL 将令牌传递到 Webview IOS Swift

从按钮到 WebView XCODE 4.5 的 URL 列表

WebView windows phone 8.1