0

Я пытаюсь настроить службу, которая обнаруживает, когда экран отключается и отключает Wi-Fi.Обнаружение экрана вкл./Выкл. И изменение состояния wifi в Android

Вот мой код:

Услуга:

public static boolean isScreen; 

private int mInterval = 5000; 
private Handler mHandler; 

@Override 
public void onCreate() { 
    mHandler = new Handler(); 

    startRepeatingTask(); 

    IntentFilter mFilter = new IntentFilter("com.my.package.myAction"); 
    BroadcastReceiver mReceiver = new screenReceiver(); 
    registerReceiver(mReceiver, mFilter); 
} 

Runnable mStatusChecker = new Runnable() { 
    @Override 
    public void run() { 

     Intent intent = new Intent(); 
     intent.setAction("com.my.package.myAction"); 
     sendBroadcast(intent); 

     PowerManager pm = (PowerManager) androidTweaker.this.getSystemService(Context.POWER_SERVICE); 
     isScreen = pm.isScreenOn(); 

     mHandler.postDelayed(mStatusChecker, mInterval); 
    } 
}; 

void startRepeatingTask() { 
    mStatusChecker.run(); 
} 

void stopRepeatingTask() { 
    mHandler.removeCallbacks(mStatusChecker); 
} 

И вот мой первый вопрос: Я создал обработчик для проверки каждые 5 секунд состояния экрана. У вас есть лучшее решение?

Мой приемник:

public class screenReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 

    ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE); 
    NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 

    if (!myService.isScreen && !mWifi.isConnected()) { 
      WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
      wifiManager.setWifiEnabled(false); 
     } 
} 

}

А вот мой крах службы. Лог-код сообщает об ошибке в этой строке: wifiManager.setWifiEnabled (false); (Приемник)

Мой манифест:

<service android:name=".myService"/> 

    <receiver android:name=".screenReceiver"> 
    <intent-filter> 
     <action android:name="com.my.package.myAction"/> 
    </intent-filter> 
    </receiver> 

</application> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<user-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<user-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 

Моя служба, конечно, получил уведомление с переднего плана, так что это всегда. Любая помощь?

Edit: У меня главная проблема (изменение состояния Wi-Fi) решено заменить

<user-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<user-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 

с

<use**s**-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<use**s**-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 

Любым способом, чтобы служба обнаружения экрана, без обработчика?

EDIT2: Проблема 1 решается также:

Услуги:

IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); 
filter.addAction(Intent.ACTION_SCREEN_OFF); 
     filter.addAction("com.my.package.myAction"); 
BroadcastReceiver mReceiver = new screenReceiver(); 
registerReceiver(mReceiver, filter); 

Приемник:

@Override 
public void onReceive(Context context, Intent intent) { 

    if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { 
     WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     wifiManager.setWifiEnabled(false); 
    } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { 
     WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
     wifiManager.setWifiEnabled(true); 
    } 
    Intent i = new Intent(context, androidTweaker.class); 
    context.startService(i); 
} 

ответ

1

Чтобы получить состояние включения/выключения экрана, используйте ACTION_SCREEN_ON и ACTION_SCREEN_OFF.

+0

Да, но это не решает мою проблему ... это альтернатива PowerManager pm = (PowerManager) androidTweaker.this.getSystemService (Context.POWER_SERVICE); isScreen = pm.isScreenOn(); мой застрявший на изменении состояния wifi! – iGio90

+0

Часть вашего вопроса попросила альтернативное/лучшее решение для проверки состояния экрана. Поэтому я дал это. Сиддхарт Вьяс дал решение проблемы Wi-Fi. –

+0

Я решил состояние wifi без другого мод .. я постараюсь заменить обработчик экраном действий, и если работа, я собираюсь отметить ваш ответ! – iGio90

1

Вам нужно добавить ниже строки в файл манифеста приемник для изменения состояния Wi-Fi:

<action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
<action android:name="android.net.wifi.SCAN_RESULTS" /> 

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^