[英]Broadcastreceiver on Android 7.1.1 sometimes not working
我創建了一個應用程序,如果收到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()(...)
廣播接收器:
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”方法,而無需使用飛行模式圖塊。 我猜該系統殺死了我的服務時間,但是現在我的程序綁定了一個圖塊,所以它不再能這樣做了。
我仍然想聽聽有關該主題的任何想法。 也許有一天我可以擺脫瓷磚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.