Я хочу реализовать сервис, который управляет экраном вкл/выкл. Для этого я создал BootReceiver
, который вызывается при загрузке, и я начинаю свою службу. Однако, мой ScreenBroadcastReceiver
никогда не называется, почему? Я зарегистрировал его не в том месте, я сделал это onCreate службы ... Пожалуйста, помогите мне, где я должен зарегистрировать его?Android BroadcastReceiver никогда не называется
Таким образом, приложение должно работать на фоне (без взаимодействия с пользователем), и оно будет регистрировать экран вкл и выкл. Я начал эти коды, но мне кажется, что мне нужно зарегистрировать свой трансляционный транслятор ScreenBroadcastReceiver. Если я сделаю это onCreate службы. я должен его изменить? моя конечная цель, чтобы запустить это приложение на фоне так, что приложение работает без взаимодействия с пользователем
Это BootReceiver, что называется в самом начале:
public class BootReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.w("TAG", "BootReceiver");
Intent service = new Intent(context, ScreenListenerService.class);
context.startService(service);
}
}
Это услуга:
public class ScreenListenerService extends Service {
public void onCreate(){
super.onCreate();
Log.w("TAG", "ScreenListenerService---OnCreate ");
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
BroadcastReceiver screenOnReceiver = new ScreenBroadcastReceiver();
registerReceiver(screenOnReceiver, filter);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.w("TAG", "ScreenListenerService---onStart ");
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
}
Это ScreenBroadcastReceiver:
public class ScreenBroadcastReceiver extends BroadcastReceiver {
///this part is never called, even if the screen is turned on/off.
public static boolean screenOff;
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
screenOff = true;
System.out.println("SCREEN TURNED OFF on BroadcastReceiver");
} else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
screenOff = false;
System.out.println("SCREEN TURNED ON on BroadcastReceiver");
}
Intent i = new Intent(context, ScreenListenerService.class);
i.putExtra("screen_state", screenOff);
context.startService(i);
}
}
И manifes т:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".main"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".ScreenListenerService"></service>
<receiver android:name=".BootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE" />
</intent-filter>
</receiver>
</application>
</manifest>
Update: Можно протестировать этот код в эмуляторе и дайте мне знать результат?
Проверьте, правильно ли ваш сервис работает или нет в мобильных запущенных службах. –
Я напечатал несколько журналов в своем сервисе, и они хорошо напечатаны. Но нет журнала для ScreenBroadcastReceiver. –
После печати команды журнала в сервисе, boradcastreceiver никогда не вызывается (для него нет журнала). И коды обслуживания запускаются только один раз, чего я не хватает? –