Dheeraj Chaudhary
Dheeraj Chaudhary

Reputation: 71

Can't get selected text from webview

I am trying to get selected text from webview with below code but this returning null.please let me now that where is the problem in below code.

in this code index.html is a html file inside my sdcard/dheeraj/index.html folder.

        import android.app.Activity;
        import android.content.res.AssetManager;
        import android.os.Bundle;
        import android.os.Environment;
        import android.content.ClipboardManager;
        import android.util.Log;
        import android.view.ActionMode;

        import android.view.KeyEvent;
        import android.view.Menu;
        import android.view.MenuItem;
        import android.webkit.WebSettings;
        import android.webkit.WebView;
        import android.widget.Toast;


    public class AddToNotesWithWebViewActivity extends Activity
    {

        AssetManager assetManager;
        WebView webview;
        String line, line1 = "", finalstr = "";
        int i = 0;
        private ActionMode mActionMode = null;
        private ClipboardManager clipboard;
        boolean mark_text=false;

        @Override
        public void onActionModeStarted(ActionMode mode) {
            if (mActionMode == null) {
                mActionMode = mode;
                Menu menu = mode.getMenu();
                // Remove the default menu items (select all, copy, paste, search)
                menu.clear();

                mode.getMenuInflater().inflate(R.menu.add_to_notes_menu, menu);
            }

            super.onActionModeStarted(mode);
        }


        public void onContextualMenuItemClicked(MenuItem item)
        {
            switch (item.getItemId())
            {
                case R.id.add_to_notes_menu_item:

                    clipboard =
                            (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
                    emulateShiftHeld(webview);
                    selectedText();




                    break;

                default:

                    break;
            }

            // This will likely always be true, but check it anyway, just in case
            if (mActionMode != null) {
                mActionMode.finish();
            }
        }

        private void selectedText()
        {
            Toast.makeText(this, clipboard.getText(),
                    Toast.LENGTH_SHORT).show();
        }


        @Override
        public void onActionModeFinished(ActionMode mode) {
            mActionMode = null;
            super.onActionModeFinished(mode);
        }


        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.ac_add_to_notes_web_view);
            webview=(WebView)findViewById(R.id.web_view_browser);



            WebSettings webSettings = webview.getSettings();
            webSettings.setJavaScriptEnabled(true);

            webview.loadUrl("file://" + Environment.getExternalStorageDirectory() + "/dheeraj/index.html");

        }

        private void emulateShiftHeld(WebView view)
        {

         try
            {
                KeyEvent shiftPressEvent = new KeyEvent(0, 0, KeyEvent.ACTION_DOWN,
                        KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0);
                shiftPressEvent.dispatch(view);

                registerForContextMenu(view);

            }
            catch (Exception e)
            {
                Log.e("dd", "Exception in emulateShiftHeld()", e);
            }
        }

    }

Please help....?????????

Upvotes: 1

Views: 489

Answers (2)

Jain Nidhi
Jain Nidhi

Reputation: 255

        public void getMyText(String myText) {
          // this is called from JS
             System.out.println(myText);
       }

  }

     private class myWebViewClient extends WebViewClient {
            <at> Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return true;
            }  


      Override
      public void onPageFinished(WebView view, String url) {
            view.loadUrl("javascript:window.cpjs.getMyText(document.getElementById('myText').innerHTML);void(0);");

        }
    }

Upvotes: 0

BSavaliya
BSavaliya

Reputation: 827

You can refer following code :

 package com.Demo.SelectText;

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.webkit.WebView;

    public class MainActivity extends Activity {
     WebView mWebView;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mWebView = (WebView)findViewById(R.id.webview);
            mWebView.loadUrl("http://devemat-androidprogramming.blogspot.com/");

        }

        private static final int SELECTTEXT_MENU_ID = Menu.FIRST;

        @Override
        public boolean onCreateOptionsMenu(Menu menu){
         super.onCreateOptionsMenu(menu);

         menu.add(0, SELECTTEXT_MENU_ID, 0, "Select Text");

         return true;
        }

        public boolean onPrepareOptionsMenu(Menu menu){
         super.onPrepareOptionsMenu(menu);
         return true;
        }

        public boolean onOptionsItemSelected(MenuItem item){
         switch(item.getItemId()){
         case SELECTTEXT_MENU_ID:
              SelectText();
              return true;
         }
         return true;
        }

        public void SelectText(){
        try{
          KeyEvent shiftPressEvent = 
                   new KeyEvent(0, 0, KeyEvent.ACTION_DOWN,     
                   KeyEvent.KEYCODE_SHIFT_LEFT, 0, 0);
          shiftPressEvent.dispatch(mWebView);
      }catch(Exception e){
          throw new AssertionError(e);
      }
     }
    }

Upvotes: 1

Related Questions