Я пытаюсь настроить службу, которая обнаруживает, когда экран отключается и отключает 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);
}
Да, но это не решает мою проблему ... это альтернатива PowerManager pm = (PowerManager) androidTweaker.this.getSystemService (Context.POWER_SERVICE); isScreen = pm.isScreenOn(); мой застрявший на изменении состояния wifi! – iGio90
Часть вашего вопроса попросила альтернативное/лучшее решение для проверки состояния экрана. Поэтому я дал это. Сиддхарт Вьяс дал решение проблемы Wi-Fi. –
Я решил состояние wifi без другого мод .. я постараюсь заменить обработчик экраном действий, и если работа, я собираюсь отметить ваш ответ! – iGio90