Wi - Fi && Mobile Data
03.12.2013 - 10:07
Merhaba,
Wi-Fi ve Mobil verinin açık olup olmadığını kontrol edip, kapalı ise nasıl açabilirim?
106
Görüntülenme
0 Beğeni
Motorola telsiz kullanan var mı
wifi, 5651 loglama bilen var mı.
Galaxy SIII , Android OS 4.1.2
Hangi cihazda deniyorsun?
Yüklü Android OS versiyonu nedir?
Loglarda herhangi bir hata görünüyor mu, hata alıyor musun?
Bu arada bir önceki mesajımda belirtmeyi unutmuşum sistem servislerini onCreate metodumun içinde alıyorum onlarda da herhangi bir problem yok.
connectivityManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
Can Bey, yazdığınız metodu aynen yazdım;
protected void setMobileDataOn(boolean enabled) throws Throwable{
final Class connectivityManagerClass = Class.forName(connectivityManager.getClass().getName());
final Field iConnectivityManagerField = connectivityManagerClass.getDeclaredField("MobileService");
final Object iConnectivityManager = iConnectivityManagerField.get(connectivityManager);
final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
final Method method = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
method.setAccessible(true);
method.invoke(iConnectivityManager, enabled);
}
Bu şekilde de çağırdım;
setMobileDataOn(true);
Reflect sınıflarını da Eclipse otomatik olarak import etti;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
AndroidManifest.xml dosyasına gerekli izinleri de verdim;
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
Fakat herhangi bir sonuç alamadım, Wi-Fi problemim çözüldü ancak Mobil Veriyi bir türlü açamadım.
Teşekkürler Can Bey, Kullanıcı iznini doğrudan almayacağım ama Alert Dialog şeklinde sormayı planlıyorum 'Wi-Fi veya Mobil Veriyi Aç' şeklinde ona göre açacağım, tekrar yardımlarınız için çok teşekkürler, iyi çalışmalar.
Bu arada eklemeyi unuttum. Uygulamanın manifest dosyasında
Wi-Fi için
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
izinleri
Mobil data için
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
izni olmak zorunda.
Kolay gelsin.
Merhaba Anıl,
Bu soruna https://gelecegiyazanlar.turkcell.com.tr/soru/gps-location verdiğim cevabı açayım o zaman. Dediğim gibi donanım ayarlarını programatik olarak açıp kapayabilmek için kullanıcı izinlerine ihtiyacın var bu izinler olmadan bu ayarları değiştiremezsin. Uygulamanın manifest dosyasına ekleyeceğin uygun kullanıcı izinleriyle cihazın Wi-Fi, Mobil Data, ve Bluetooth'unu açıp kapayabilirsin. Fakat GPS'i programatik olarak açıp kapayamazsın. İşletim sistemi buna izin vermez, sadece sistem uygulamaları bunu yapabilir.
Aşağıdaki kod parçalarını kullanarak Wi-Fi ve Mobil Datayı uygulamadan açıp kapatabilirsin. Fakat standart bir uygulamada doğru yol kullanıcının haberi olmadan bu ayarları değiştirmek değil, kullanıcıdan bu ayarları açıp kapamasını istemek ve kullanıcıyı ayarlara yönlendirmektir bilgin olsun.
Wi-Fi'yi aşağıdaki şekilde açıp kapayabilirsin:
[kod]
protected void setWifiDataOn(boolean enabled) {
WifiManager wifiMgr = (WifiManager)this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiMgr.setWifiEnabled(enabled);
}
[/kod]
Mobil Datayı da aşağıdaki şekilde açıp kapayabilirsin. Burada Android SDK bu iş için bize doğrudan bir yöntem vermediği için Java'daki Reflection API'sini kullanarak bu işi yapabiliyoruz:
[kod]
protected void setMobileDataOn(boolean enabled) throws Throwable
{
final ConnectivityManager connMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
final Class connMgrClass = Class.forName(connMgr.getClass().getName());
final Field iConnectivityManagerField = connMgrClass.getDeclaredField("mService");
iConnectivityManagerField.setAccessible(true);
final Object iConnectivityManager = iConnectivityManagerField.get(connMgr);
final Class iConnectivityManagerClass = Class.forName(iConnectivityManager.getClass().getName());
final Method method = iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled", Boolean.TYPE);
method.setAccessible(true);
method.invoke(iConnectivityManager, enabled);
}
[/kod]
Deddiğim gibi doğru yol kullanıcının haberi olmadan bu ayarları değiştirmek değil, kullanıcıdan bu ayarları açıp kapamasını istemek ve kullanıcıyı ayarlara yönlendirmektir.
Kolay gelsin.
Kontrol kısmını hallettim kapalıysa nasıl açacağımı araştırıyorum, yardımlarınız için teşekkürler.
WifiManager ve ConnectivityManager için örnekler araştırmalısınız.
İkinci gönderdiğim fonksiyon, bağlı olup olmadığını gösteriyor. İlk gönderdiğim ise bağlıysa şunu yap bağlı değilse bunu yap demek için. 2sini birden kullanman lazım yani.
Diğer sorunun cevabı bende yok malesef
Teşekkürler, bunu görmüştüm ama Data için TelephonyManager kullanmışlar falan kafam karıştı o nedenle sormaya gerek duydum sadece bunlar ile her ikisini de kontrol edebilirim yani öyle mi?
- Kapalıysa nasıl açabilirim yani kapalıysa olduğu duruma ne yazmalıyım ki açılsın?
Yukarda yazdığım kontrol mekanizmasını çalıştırmak için bu fonksiyonu kulanmalısın. Yolladığımı düzenleyemedim :)
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null) {
// baglanti yok
return false;
} else
return true;
}
Bu fonksiyon sana true veya false dönecek ona göre yukarda yazdığımı yaptıracaksın
Yukarda yazdığım kontrol mekanizmasını çalıştırmak için bu fonksiyonu kulanmalısın. Yolladığımı düzenleyemedim :)
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null) {
// baglanti yok
return false;
} else
return true;
}
Bu fonksiyon sana true veya false dönecek ona göre yukarda yazdığımı yaptıracaksın
Datanın açık olup olmadığını kontrol için:
if(isNetworkConnected()){
// açıksa yapılacaklar
}else{
// kapalıysa yapılacaklar
}
Tabi bunu kontrol etmek için AndroidManifest.xml dosyasında,
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
izinlerini vermen gerekiyor. Ama kapalıysa nasıl açarsın onu bilmiyorum :)