ここで私はクリップボードのテキストを取得しようとしています。最初にクリップボードで試し、次にsharedpreferencesで両方の方法を試しました。カスタムWebビューから単語を選択し、jsinterfaceを使用してその単語をコピーすると、動作は同じですが、単語は正常に取得されましたが、その世界を取得しようとした直後に、別の世界が得られると仮定すると、最初に「A」という単語をコピーし、次に「B」という単語をコピーして、すぐに「B」を取得しようとすると、「A」が返されます。ここに私のコードが含まれていますwebviewsアクションアイテムがクリックされました
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
switch (item.getItemId()) {
case R.id.action_done:
getSelectedData();
mode.finish();
return true;
break;
}
}
そして私の getSelectedData() 関数
private void getSelectedData() {
String js = "(function getSelectedText() {" + "var txt;"
+ "if (window.getSelection) {"
+ "txt = window.getSelection().toString();"
+ "} else if (window.document.getSelection) {"
+ "txt = window.document.getSelection().toString();"
+ "} else if (window.document.selection) {"
+ "txt = window.document.selection.createRange().text;" + "}"
+ "JSInterface.getText(txt);" + "})()";
// calling the js function
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
evaluateJavascript("javascript:" + js, null);
} else {
loadUrl("javascript:" + js);
}
showDialog();
}
この関数で getText は javascriptInterface の関数であり、私の webappInterface クラスは以下のとおりです
public class WebAppInterface {
Context mContext;
WebAppInterface(Context c) {
mContext = c;
}
@JavascriptInterface
public void getText(String text) {
// put selected text into clipdata
ClipboardManager clipboard = (ClipboardManager)
mContext.getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clip = ClipData.newPlainText("simple text",text);
clipboard.setPrimaryClip(clip);
sp.edit().putString("COPIED_TEXT",text).commit();
}
}
私のshowDialog関数では、sharedpreferencesとクリップボードテキストに入れられたテキストを取得しようとしていますが、この問題を解決する方法について上記で説明したように、以前に保存したテキストを取得します
//ClipboardManager clipboard = (ClipboardManager) context.getSystemService(context.CLIPBOARD_SERVICE);
//String selectedClipboardText = "";
//selectedClipboardText = (String) clipboard
// .getText();
String selectedClipboardText = "";
selectedClipboardText=BilingualNews.BNPref.getString("COPIED_TEXT", "");
selectedClipboardText = getFilteredSelfTextWord(selectedClipboardText);