2017-12-16 14 views
0

webviewの画像に長押しのダウンロードアクションを有効にしたい。それは私が試したコードを抜粋したものです:android WebViewの画像にlongpressアクションをダウンロードするには?

public void onCreate(Bundle savedInstanceState) { 
     registerForContextMenu(descriptionWebView); 
    } 

    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenu.ContextMenuInfo menuInfo) { 
     WebView.HitTestResult hitTestResult = descriptionWebView.getHitTestResult(); 
     switch (hitTestResult.getType()) { 
     // ... 
     } 
    } 

答えて

0

コンテキストメニューのためにyout WebViewを登録する必要があります。 youtアクティビティでは、registerForContextMenu(webView);

蛇腹

WebView webView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    webView = (WebView)findViewById(R.id.WebView1); 

    webView.getSettings().setJavaScriptEnabled(true); 

    webView.setWebViewClient(new WebViewClient()); 

    registerForContextMenu(webView); 

    webView.loadUrl(HTTP_URL); 
} 

@Override 
public void onCreateContextMenu(ContextMenu contextMenu, View view, ContextMenu.ContextMenuInfo contextMenuInfo){ 
    super.onCreateContextMenu(contextMenu, view, contextMenuInfo); 

    final WebView.HitTestResult webViewHitTestResult = webView.getHitTestResult(); 

    if (webViewHitTestResult.getType() == WebView.HitTestResult.IMAGE_TYPE || 
      webViewHitTestResult.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { 

     contextMenu.setHeaderTitle("Download Image From Below"); 

     contextMenu.add(0, 1, 0, "Save - Download Image") 
       .setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { 
        @Override 
        public boolean onMenuItemClick(MenuItem menuItem) { 

         String DownloadImageURL = webViewHitTestResult.getExtra(); 

         if(URLUtil.isValidUrl(DownloadImageURL)){ 

          DownloadManager.Request request = new DownloadManager.Request(Uri.parse(DownloadImageURL)); 
          request.allowScanningByMediaScanner(); 
          request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
          DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); 
          downloadManager.enqueue(request); 

          Toast.makeText(MainActivity.this,"Image Downloaded Successfully.",Toast.LENGTH_LONG).show(); 
         } 
         else { 
          Toast.makeText(MainActivity.this,"Sorry.. Something Went Wrong.",Toast.LENGTH_LONG).show(); 
         } 
         return false; 
        } 
       }); 
    } 
} 

またはこの代替である

@Override 
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    final WebView.HitTestResult result = browser.getHitTestResult(); 
    MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() { 
     public boolean onMenuItemClick(MenuItem item) { 
      // handle on context menu click 
      return true; 
     } 
    }; 

    if (result.getType() == WebView.HitTestResult.IMAGE_TYPE || 
      result.getType() == WebView.HitTestResult.SRC_IMAGE_ANCHOR_TYPE) { 

     menu.setHeaderTitle(result.getExtra()); 
     menu.add(0, 666, 0, "Save Image").setOnMenuItemClickListener(handler); 
    } 
} 
+0

@Isamil Kilicを示すオーバーライドonCreateContextMenu方法の後に、私はあまりにも短いコードを試みました。同じ場所で同じエラーが表示されます –

+0

@SinanKara正しくインポートしてください。これは、 "android.webkit.WebViewのインポート"が必要なためです。 WebViewsのために。私はテストし、それは働いています。 http://prntscr.com/hoh5oi –

+0

@Isamil Kilic あなたはそれに対して何も持っていない場合、あなたは混乱して、プロジェクトを共有することができますので、私は私の –

関連する問題