Я создал приложение, которое устанавливает полную яркость экрана, если получено намерение SCREEN_ON. Я использую это приложение, потому что экран моего телефона немного сломан, и иногда возникают проблемы, если экран включен. Мое приложение работает хорошо, только вот случайно не работает. Несмотря на то, что моя служба все еще работает в фоновом режиме, яркость экрана не меняется. Я создал резервную копию, чтобы при изменении режима полета вызывался метод changeBrightness (). Это всегда срабатывает. Я предполагаю, что проблема как-то связана с IntentFilter, потому что это разница между намерением SCREEN_ON и намерением AIRPLANEMODE_CHANGED.
Моя фоновая служба:
public class UpdateService extends Service {
public int counter = 0;
BroadcastReceiver screenReceiver;
public UpdateService(Context applicationContext) {
super();
}
public UpdateService() {
}
@Override
public void onCreate(){
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.setPriority(100);
BroadcastReceiver mReceiver = new Receiver();
registerReceiver(mReceiver, filter);
screenReceiver = mReceiver;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
if (intent != null) {
boolean screenOff = intent.getBooleanExtra("screen_state", true);
if (screenOff == false) {
changeBrightness();
}
}
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Intent broadcastIntent = new Intent("RestartSensor");
unregisterReceiver(screenReceiver);
sendBroadcast(broadcastIntent);
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
public void changeBrightness()(...)
BroadcastReceiver:
public class Receiver extends BroadcastReceiver {
private boolean screenOff;
Intent i;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOff = true;
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.d("Info", "Screen on, start service!");
screenOff = false;
} else if (intent.getAction().equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
screenOff = false;
} else if (intent.getAction().equals("RestartService")) {
screenOff = true;
Log.d("Info", "RestartService received");
}
context.startService(new Intent(context, UpdateService.class).putExtra("screen_state", screenOff));
screenOff = true;
Log.d("Info", "bottom onReceive");
}
}
Наконец, манифест:
<?xml version = "1.0" encoding = "utf-8"?>
<uses-permission android:name = "android.permission.WRITE_SETTINGS"/>
<uses-permission android:name = "android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:allowBackup = "true"
android:icon = "@mipmap/ic_launcher"
android:label = "@string/app_name"
android:supportsRtl = "true"
android:theme = "@style/AppTheme">
<activity android:name = ".MainActivity">
<intent-filter>
<action android:name = "android.intent.action.MAIN" />
<action android:name = "android.intent.action.BOOT_COMPLETED" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service
android:name = ".UpdateService"
android:enabled = "true"></service>
<receiver
android:name = ".Receiver"
android:enabled = "true"
android:exported = "true"
android:label = "RestartServiceWhenStopped">
<intent-filter>
<action android:name = "RestartSensor" />
<action android:name = "android.intent.action.AIRPLANE_MODE" />
<action android:name = "android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
</application>
Любая помощь будет оценена по достоинству. Заранее благодарим за любой ответ!




Проблема исчезла после того, как я добавил в свое приложение "плитку быстрых настроек". С помощью этой плитки я мог запустить свой метод «changeBrightness» без использования плитки режима полета. Я предполагаю, что система иногда убивала мою службу, но теперь, когда у меня есть плитка, привязанная к моей программе, она больше не может этого делать.
Хотелось бы еще услышать какие-нибудь идеи по теме. Может быть, однажды я избавлюсь от плитки.