Android componentlerinden WebView i kullanarak kendi browser uygulamamızı temel düzeyde geliştireceğiz.
İlk aşamada
gibi işlemleri yaparak browserımızı tamamlayacağız. Dilerseniz daha sonra kendiniz basit bir sqlite tablosuna bağlayarak geçmişi tutabilir, favori sayfalarınızı vs ekleyebilir, tab sekmeleri oluşturabilir ve tamamen kendi browserınızı oluşturarak kullanabilirsiniz.
hazırlanıyor...
Öncelikle yukarıdaki resimde de göreceğiniz üzere görselde İleri Geri Anasayfa ve Git işlemleri için butonlarımızı ekliyoruz. Alt kısmına ise webView görselimizi ekliyoruz. Yukarıdaki şeklin görsel kodu ise aşağıdaki gibidir.
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
android:background
=
"#E0E0D1"
>
<
LinearLayout
android:id
=
"@+id/katman1"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
android:weightSum
=
"3"
>
<
Button
android:id
=
"@+id/buttonGeri"
android:layout_width
=
"0dp"
android:layout_height
=
"wrap_content"
android:layout_weight
=
"1"
android:text
=
"Geri"
/>
<
Button
android:id
=
"@+id/buttonAnasayfa"
android:layout_width
=
"0dp"
android:layout_height
=
"wrap_content"
android:layout_weight
=
"1"
android:text
=
"Anasayfa"
/>
<
Button
android:id
=
"@+id/buttonIleri"
android:layout_width
=
"0dp"
android:layout_height
=
"wrap_content"
android:layout_weight
=
"1"
android:text
=
"Ileri"
/>
</
LinearLayout
>
<
LinearLayout
android:id
=
"@+id/katman2"
android:layout_width
=
"match_parent"
android:layout_height
=
"wrap_content"
android:layout_below
=
"@id/katman1"
>
<
TextView
android:id
=
"@+id/textViewURL"
android:layout_width
=
"50dp"
android:layout_height
=
"wrap_content"
android:layout_weight
=
"1"
android:paddingLeft
=
"13dp"
android:textColor
=
"#000"
android:text
=
"URL"
/>
<
EditText
android:id
=
"@+id/editTextURL"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_weight
=
"1"
android:ems
=
"10"
>
</
EditText
>
<
Button
android:id
=
"@+id/buttonGO"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_weight
=
"1"
android:text
=
"Git"
/>
</
LinearLayout
>
<
TextView
android:id
=
"@+id/copyright"
android:layout_width
=
"wrap_content"
android:layout_height
=
"wrap_content"
android:layout_alignParentBottom
=
"true"
android:layout_centerHorizontal
=
"true"
android:layout_marginBottom
=
"3dp"
android:layout_marginTop
=
"3dp"
android:text
=
"@string/copyright"
android:textColor
=
"#553400"
/>
<
WebView
android:id
=
"@+id/webFK"
android:layout_width
=
"fill_parent"
android:layout_height
=
"3000dp"
android:layout_below
=
"@id/katman2"
android:layout_above
=
"@id/copyright"
/>
</
RelativeLayout
>
Görsel kısmı tamamladıktan sonra şimdi asıl kod bloğumuza geçelim. Görseldeki componentleri tanımlama kısmını global olarak aşağıdaki gibi tanımlayarak
webView için temel de gerekli tanımlama ve kullanım kodunu inceleyecek olursak, aşağıdaki kodu yazdıktan sonra webView aracımız artık çalışıyor hale gelecektir
webViewFK = (WebView) findViewById(R.id.webFK);
webViewFK.getSettings().setJavaScriptEnabled(
true
);
webViewFK.setWebViewClient(
new
MyWebViewClient());
Burada dikkatinizi çekmek istediğim bir nokta var. SerWebViewClient ile Android de kendi browser yada browser uygulamalarının yerine Bizim hazırladığımız browser ile çalışması için Override işlemi uygulamış oluyoruz. Aksi taktirde bu kodu yazmaz iseniz açılan google sayfasında birşey arattırdığınızda telefonunuz kendi browserında açacaktır. Bunu eklemeyi unutmayınız ! Tabi bir de burada kullandığımız MyWebViewClient metodunu tanımlamamız gerekmekte. Bunun içinde aşağıdaki kodu kullanıyoruz
private
class
MyWebViewClient
extends
WebViewClient {
@Override
public
boolean
shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return
true
;
}
}
Uygulamamız interneti kullanacağından dolayı izinlerini de tanımlamamız gerekiyor. Bir de ek olarak cihazın bağlantı durumunu kontrol etmek ve internete bağlı değilse kullanıcıya bildiri vermek amacıyla network durumunu kontrol için de gerekli izni AndroidManifest.xml dosyasına tanımlamalıyız.
<
uses-permission
android:name
=
"android.permission.INTERNET"
/>
<
uses-permission
android:name
=
"android.permission.ACCESS_NETWORK_STATE"
/>
İnternet kontrolünü sağlamak ve uyarı verdirmek içinde aşağıdaki gibi metodlarınızı tanımlayabilirsiniz. Yada internet kontrolü hiç yapmayacaksanız bu kısmı eklemeyebilirsiniz ama kullanıcı bilgilendirmeleri olumlu etki uyandırdığından Sizinde kullanmanızı tavsiye ederim
public
void
BaglantiHatasiVer() {
AlertDialog.Builder alertDialogBuilder =
new
AlertDialog.Builder(
MainActivity.
this
);
alertDialogBuilder.setTitle(
"Sunucu Hatası"
);
alertDialogBuilder.setMessage(
"internet bağlantınızı kontrol edip tekrar deneyin"
)
.setCancelable(
true
);
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
public
boolean
InternetKontrol() {
ConnectivityManager manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if
(manager.getActiveNetworkInfo() !=
null
&& manager.getActiveNetworkInfo().isAvailable()
&& manager.getActiveNetworkInfo().isConnected()) {
return
true
;
}
else
{
return
false
;
}
}
Şimdi de son olarak butonlara işlevlerini tanımlayalım.
editTextURL = (EditText) findViewById(R.id.editTextURL);
buttonGeri = (Button) findViewById(R.id.buttonGeri);
buttonIleri = (Button) findViewById(R.id.buttonIleri);
buttonAnasayfa = (Button) findViewById(R.id.buttonAnasayfa);
buttonGO = (Button) findViewById(R.id.buttonGO);
buttonGO.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View arg0) {
if
(editTextURL.getText().toString().length() >
10
) {
Toast.makeText(
getApplicationContext(),
editTextURL.getText().toString()
+
" adresi yükleniyor..."
,
Toast.LENGTH_SHORT).show();
if
(InternetKontrol())
else
BaglantiHatasiVer();
}
else
{
Toast.makeText(getApplicationContext(),
"Geçersiz Adres"
,
Toast.LENGTH_SHORT).show();
}
}
});
buttonAnasayfa.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View arg0) {
if
(InternetKontrol())
else
BaglantiHatasiVer();
}
});
buttonGeri.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View arg0) {
if
(webViewFK.canGoBack()) {
webViewFK.goBack();
}
}
});
buttonIleri.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View arg0) {
if
(webViewFK.canGoForward()) {
webViewFK.goForward();
}
}
});
Burada dikkat etmeniz gereken noktalardan birisi de adrese gitme butonunda kullanıcılar adreslerin başına http://www.farukunal.net http:// bölümünü girmeyip direk adres girdiklerinden kod tarafında http:// yi eklemeniz kullanırken işinizi kolaylaştıracaktır.
Şuan programımız bitti kullanabilirsiniz, son olarak bir de geri tuşuna ama telefondaki geri tuşuna basıldığında yine önceki sayfaya gelmesi işlemini ekleyeceğim.
@Override
public
boolean
onKeyDown(
int
keyCode, KeyEvent event) {
if
(keyCode == KeyEvent.KEYCODE_BACK) {
try
{
if
(webViewFK.canGoBack()) {
webViewFK.goBack();
}
else
{
return
super
.onKeyDown(keyCode, event);
}
}
catch
(Exception e) {
// TODO: handle exception
}
return
true
;
}
return
super
.onKeyDown(keyCode, event);
}