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コード)

  
    
// 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 >