Android---WebView(Webページのテキストボックス呼び出しシステム連絡先番号)
10167 ワード
今日、同僚とWebViewのテキストコントロールについて、システムの連絡先を取得する機能について議論しました.以前は単純にテキストボックスをクリックしたときにシステムの連絡先ActivityをポップアップするだけでOKだと思っていました.すぐに浮かぶアイデアはjavaメソッドでジャンプ機能を実現し、Jsイベントでjavaメソッドを呼び出し、ある連絡先を選択した後、連絡先番号をテキストボックスに割り当てることです.当時は単純に実現できないだろうと思っていたが、後で同僚が注意すると、クライアントページのJsイベントのパラメータとして番号を渡してテキストボックスに値を付けたら.これは確かに可能ですが、javaがクライアントJsを呼び出すメソッドのエントリはどこですか(システムの連絡先を閉じた後、WebViewを含むActivityを再現するときに呼び出さなければなりません)、ここではonActivity Result()という方法を考える人もいるはずです.はい、この方法はシステム連絡先Activityを閉じた後にコールバックします.ただし、システム連絡先を呼び出す場合はstartActivity ForResult()であることが前提です.
全体的な考え方は、次のような具体的なコードを貼ります.
Javaコード:(1)テキストボックスをクリックしたときにJavaメソッドを呼び出すシステム連絡先(JsがJavaメソッドを呼び出す方法は以下のJsコード)
(2)連絡先を取得した後にクライアントJs[setText(var value)]メソッドを呼び出してテキストボックスに値を付ける
クライアントJsコード:
全体的な考え方は、次のような具体的なコードを貼ります.
Javaコード:(1)テキストボックスをクリックしたときにJavaメソッドを呼び出すシステム連絡先(JsがJavaメソッドを呼び出す方法は以下のJsコード)
//
addJavascriptInterface()
browser.addJavascriptInterface(
new
Object() {
@SuppressWarnings(
"
unused
"
)
public
void
getContacts() {
Intent i1
=
new
Intent(Intent.ACTION_PICK,
android.provider.Contacts.People.CONTENT_URI);
startActivityForResult(i1, CODE_PHONEBOOK);
}
},
"
xxxxxxxx
"
);
(2)連絡先を取得した後にクライアントJs[setText(var value)]メソッドを呼び出してテキストボックスに値を付ける
@Override
protected
void
onActivityResult(
int
requestCode,
int
resultCode, Intent data) {
//
TODO Auto-generated method stub
Cursor c
=
null
;
super
.onActivityResult(requestCode, resultCode, data);
if
(requestCode
==
CODE_PHONEBOOK) {
//
try
{
if
(data
!=
null
) {
c
=
getContentResolver().query(data.getData(),
null
,
null
,
null
,
null
);
}
if
(c
!=
null
) {
c.moveToFirst();
for
(
int
i
=
0
; i
<
c.getColumnCount(); i
++
) {
String name
=
c.getColumnName(i);
String phoneNum
=
c.getString(i);
if
(name.equalsIgnoreCase(
"
number
"
)) {
currentWebView.loadUrl(
"javascript:setText('"
+ phoneNum + "')"
);
break
;
}
}
c.close();
}
}
catch
(Exception e) {
e.getMessage();
}
}
}
クライアントJsコード:
<
html
>
<
head
>
<
script
language
="javascript"
type
="text/javascript"
>
function
setText(xx){
document.getElementById(
'
test
'
).value
=
xx;
}
</
script
>
</
head
>
<
body
>
<
input
id
="test"
type
="text"
onclick
="javascript:window.xxxxxxxx.getContacts()"
/>
</
body
>
</
html
>