Обратите внимание на назначение:
ipp = &ip1;
результатов ipp
, чтобы указать на ip1
.
, поэтому для ipp
, чтобы указать на ip2
, мы должны изменить аналогичным образом
ipp = &ip2;
, чего мы явно не делаем. Вместо этого мы меняем значение по адресу, указанному в ipp
. Выполняя следующее
*ipp = ip2;
, мы просто заменяем значение, сохраненное в ip1
.
ipp = &ip1
означает *ipp = ip1 = &i
, Now, *ipp = ip2 = &j
. Таким образом, *ipp = ip2
по существу такой же, как ip1 = ip2
.
Вместо создания новой службы для широковещательного приемника вы можете напрямую создать класс вещательного приемника, который будет прослушивать системные трансляции, даже если приложение не работает. Создайте новый класс, который расширяет BroadcastReceiver
.
public class YourReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//Do your stuff
}
}
И зарегистрируйте его в манифесте.
<receiver
android:name=".YourReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.ACTION_SCREEN_ON" />
<action android:name="android.intent.action. ACTION_SCREEN_OFF" />
<category android:name="android.intent.category.DEFAUL" />
</intent-filter>
</receiver>
Читайте об Manifest-declared receivers
здесь .
Выше решение не будет работать, здесь является причиной. Проблема в том, что ваша служба убивается, когда приложение убито, поэтому экземпляр вашего приемника удаляется из памяти. Здесь - это небольшой трюк, чтобы повторно запустить службу в фоновом режиме. Добавьте следующий код в свою службу.
@Override
public void onTaskRemoved(Intent rootIntent){
Intent restartServiceIntent = new Intent(getApplicationContext(), this.getClass());
restartServiceIntent.setPackage(getPackageName());
PendingIntent restartServicePendingIntent = PendingIntent.getService(getApplicationContext(), 1, restartServiceIntent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmService = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);
alarmService.set(
AlarmManager.ELAPSED_REALTIME,
SystemClock.elapsedRealtime() + 1000,
restartServicePendingIntent);
super.onTaskRemoved(rootIntent);
}
Хотя это неправильный способ сделать это. Также в Android 26+ вы не сможете это сделать, и вы поедете на службу переднего плана . https://developer.android.com/about/versions/oreo/background