Turkcell | Geleceği Yazanlar

Soru & Cevap

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?

6230 Görüntülenme

14 Cevap

Anıl SÖZERİ
05.12.2013 - 22:57

Galaxy SIII , Android OS 4.1.2

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Can Çiloğlu
05.12.2013 - 16:50

Hangi cihazda deniyorsun?

Yüklü Android OS versiyonu nedir?

Loglarda herhangi bir hata görünüyor mu, hata alıyor musun?

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Anıl SÖZERİ
05.12.2013 - 09:28

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);

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Anıl SÖZERİ
05.12.2013 - 09:24

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.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Anıl SÖZERİ
04.12.2013 - 12:01

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.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Can Çiloğlu
04.12.2013 - 00:56

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.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Can Çiloğlu
04.12.2013 - 00:54

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.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Anıl SÖZERİ
03.12.2013 - 22:33

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.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Caner Güral
03.12.2013 - 17:23

WifiManager ve ConnectivityManager için örnekler araştırmalısınız.

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Erhan
03.12.2013 - 17:14

İ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

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Anıl SÖZERİ
03.12.2013 - 13:22

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?

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Erhan
03.12.2013 - 12:29

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

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Erhan
03.12.2013 - 12:29

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

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Erhan
03.12.2013 - 12:27

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 :)

Sitede yorum yapabilmek için giriş yapın ya da üye olun.

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.