Yaptığımız bazı uygulamalarda, bazı kullanıcıların uygulamamızı kullanmamasını isteyebiliriz. Mesela, görüntülü görüştürme yapacağımız bir uygulamamız varsa, yalnızca mobil interneti 3G ve üzeri olan veya wifi interneti olan kullanıcıların uygulamamızdan faydalanmasını isteyebiliriz, çünkü bu bağlantı hızının aşağısındaki kişiler uygulamamızı verimli şekilde kullanamayacaktır. Dolayısı ile, bu tarz bir filtreleme kullanıcı memnuniyetsizliğinin yanı sıra yanlış verimsiz kullanımında önüne geçmiş oluyor.
Android işletim sistemi ile çalışan mobil cihazlar, network bağlantısı olarak 2 farklı tipte çalışabilirler. Mobil network (2G, 3G etc..) veya kablosuz ağ bağlantısı (Wifi). Mobil networkte kullanılan bazı teknolojiler ve bağlantı veri hızları şöyle;
GSM -> 2G, 9600 bps, data paketi taşınamıyor
GPRS -> 2.5G , teorik olarak hızı max 85.6 Kbps
EDGE -> 2.5G, teorik olarak hızı max 236.8 Kbps
UMTS -> 3G, teorik olarak hızı max 384 Kbps
HSDPA -> 3.5G, teorik olarak hızı max 1.8 Mbps – 7.2Mbps
Android tarafında ise, Android SDK’nın bize sağladığı tip ve alt tipler şunlar;
CMDA -> 3G
EDGE -> 2.5 G
EVDO_0 -> 3G
EVD0_A -> 3G
GPRS -> 2.5 G
HSDPA -> 3.5G
HSPA -> 3.5G
HSUPA -> 3.5G
UMTS -> 3G
Özellikle SDK’nın sunduğu imkanlarla birlikte, hangi teknoloji altına girdiğini bilmek, filtreleme açısından önemli bir nokta. Şimdi ise biraz Java ile Android kodları ile haşir neşir olup filtreleme işimizi yapalım.
ConnectivityManager classından yararlanarak, android cihazının bağlanabileceği muhtemel bağlantısının tiplerini belirleyeceğiz. Bu classı kullanarak aynı zamanda cihazın aktif bağlantı tipinide bulacağız.
Activity’nin içerisinde ConnectivityManager’ı tanımlayarak işe başlayalım.
Yazının başında anlatılan senaryoya bağlı kalarak, bu uygulamamızda düşük hızda olan bağlantı tiplerini elemek isteyelim. Bu bağlantı tipleri, 2.5G bağlantılar olan, EDGE ve GPRS bağlantılar olsun. Bunları aşağıdaki gibi tanımlıyoruz.
Ve şimdide yukarıda tanımlı olan, olmasını istemediğimiz bağlantı tiplerini, aktif bağlantıyla karşılaştırmak için; aktif bağlantının bilgilerine ulaşalım.
// get active network information
NetworkInfo activeNetworkInfo
= connManager.
getActiveNetworkInfo();
int activeNetType
= activeNetworkInfo.
getType(); // return mobile or wifi
int activeSubType
= activeNetworkInfo.
getSubtype(); // return edge, umts vs.
Son olarak, mesela böyle fonksiyonu kullanarak kriter karşılaştırmamızı yapalım.
public boolean isValidConnection
() {
if (activeNetType
== ConnectivityManager.
TYPE_WIFI)
return activeNetworkInfo.
isConnected();
else if (activeNetType
== ConnectivityManager.
TYPE_MOBILE &&
activeSubType
!= TelephonyManager.
NETWORK_TYPE_GPRS &&
activeSubType
!= TelephonyManager.
NETWORK_TYPE_EDGE ) {
return activeNetworkInfo.
isConnected();
}
else {
// internet bağlantınız bizim uygulamamızı kullanmanız için yavaş kalıyor! Bağlantınız 3G ya da Wifi olmalı.
return false;
}
}
Unutmadan, son olarak ConnectivityManager’ı kullanabilmeniz için projenizin manifest’ine aşağıdaki permissionları eklemeniz gerekiyor.
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
Hepsi bu kadar. Kafanıza takılan yerleri bu konu altındaki yorumlar bölümünden ya da AndroidProgramlama.com Google Grubu üzerinden sorabilirsiniz.
1 kişi bu yazıyı beğendi.