마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

webView에서 LongClick시 이미지 저장하는 기능을 구현하고 싶어요

0 추천

제가 Stack Overflow에서 검색해서 구현해봤는데요... 계속 뭔가 잘못됫다고 뜨거든요 ㅠㅠ

(http://stackoverflow.com/questions/3449098/enable-longclick-in-webview

아래는 문제의 소스입니다.

package랑 inport는 생략했습니다.

 

어디가 어떻게 잘못되었고, 해경 방법좀 알려주시면 감사하겠습니다 ㅠ

public class Enha extends Activity {
	final int		ENHA = Menu.FIRST;
        // 생략
	
	WebView enhaView;
	@SuppressWarnings("deprecation")
	@SuppressLint("SetJavaScriptEnabled")
	
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		startActivity(new Intent(this, SplashActivity.class));
		setContentView(R.layout.main);
		Toast.makeText(this, "버젼 : 1.4.1\n메뉴의 설문조사를 진행해주세요.", Toast.LENGTH_SHORT).show();
		
		enhaView = (WebView) findViewById(R.id.webview);
		enhaView.getSettings().setJavaScriptEnabled(true);
		enhaView.getSettings().setBuiltInZoomControls(true);
		enhaView.getSettings().setSupportZoom(true);
		enhaView.getSettings().setAllowFileAccess(true);
		enhaView.getSettings().setPluginState(PluginState. ON);
		enhaView.setWebChromeClient(new WebChromeClient());
		
		enhaView.loadUrl("http://m.enha.kr/wiki/FrontPage");
		String curURL = enhaView.getUrl();
		enhaView.setWebViewClient(new EnhaWebViewClient());
		
		Button btnBack = (Button)findViewById(R.id.button1);
		Button btnForward = (Button)findViewById(R.id.button2);
		Button mainBtn = (Button)findViewById(R.id.button3);
		

        btnBack.setOnClickListener(new OnClickListener(){
        	public void onClick(View v) {
        		if(enhaView.canGoBack()){
        			enhaView.goBack();
        		}
        	}
        });
        

        btnForward.setOnClickListener(new OnClickListener(){
        	public void onClick(View v) {
        		if(enhaView.canGoForward()){
        			enhaView.goForward();
        		}
        	}
        });
        
        mainBtn.setOnClickListener(new OnClickListener(){
        	public void onClick(View v) {
        		if(enhaView.canGoBack()){
        		enhaView.loadUrl("http://m.enha.kr/wiki/FrontPage");
        		enhaView.setWebViewClient(new EnhaWebViewClient());
        		}
        	}
        });
        // -------
		enhaView.registerForContextMenu(enhaView);
	}
	
	@Override
	protected void onCreateContextMenu(ContextMenu menu) {
	    super.onCreateContextMenu(menu);

	    HitTestResult result = getHitTestResult();

	    MenuItem.OnMenuItemClickListener handler = new MenuItem.OnMenuItemClickListener() {
	        public boolean onMenuItemClick(MenuItem item) {
	        	// do the menu action
	        }
	    };

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

	        menu.setHeaderTitle(result.getExtra());
	        menu.add(0, ID_SAVEIMAGE, 0, "Save Image").setOnMenuItemClickListener(handler);
	    }
	}
	
	HitTestResult result = getHitTestResult();
	HttpClient httpclient = new DefaultHttpClient();
	HttpGet httpget = new HttpGet(result.getExtra());
	HttpResponse response = httpclient.execute(httpget);
	HttpEntity entity = response.getEntity();
	if (entity != null) {
	    URL url = new URL(result.getExtra());

	    //Grabs the file part of the URL string
	    String fileName = url.getFile();

	    //Make sure we are grabbing just the filename
	    int index = fileName.lastIndexOf("/");
	    if(index >= 0)
	            fileName = fileName.substring(index);

	    //Create a temporary file
	    File tempFile = new File(Environment.getExternalStorageDirectory(), fileName);
	    if(!tempFile.exists())
	            tempFile.createNewFile();

	    InputStream instream = entity.getContent();
	    BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
	    //Read bytes into the buffer
	    ByteArrayBuffer buffer = new ByteArrayBuffer(50);
	    int current = 0;
	    while ((current = bufferedInputStream.read()) != -1) {
	            buffer.append((byte) current);
	    }

	    //Write the buffer to the file
	    FileOutputStream stream = new FileOutputStream(tempFile);
	    stream.write(buffer.toByteArray());
	    stream.close();
	}

	//생략

	public boolean onCreateOptionsMenu (Menu menu) {
        menu.add(0, SURV, 0, "설문조사");
		menu.add(0, ENHA, 0, "엔하위키 홈");
                //생략
		return super.onCreateOptionsMenu(menu);
	}
	
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		switch (item.getItemId()) {
		case ENHA:
			enhaView.loadUrl("http://m.enha.kr/wiki/FrontPage");
    		enhaView.setWebViewClient(new EnhaWebViewClient());
    		return true;
		//생략
		return super.onMenuItemSelected(featureId, item);
	}
		
	private class EnhaWebViewClient extends WebViewClient {
	@Override
	public boolean shouldOverrideUrlLoading(WebView view, String url) {
		view.loadUrl(url);
		return true;
		}
	}
}

 

로이히텐 (140 포인트) 님이 2014년 12월 23일 질문

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...