簡體   English   中英

Android 7.1.1上的Broadcastreceiver有時無法正常工作

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM