Ну, несколько месяцев назад я изучил основы андроида, и теперь я пытаюсь научиться запоминать то, что узнал. Таким образом, проблема в том, что я делаю приложение, которое, когда он ловит изменение состояния экрана (экран включен/выключен), он что-то делает. Я хочу, чтобы, когда приложение не работает (потому что пользователь убил его, нажав кнопку дома или что-то в этом роде), он все еще делает то, что я хочу. Я решил использовать приемник, но я не знаю, является ли он правильным вариантом.Запуск приемника, даже если приложение не открыто
Если приложение сведено к минимуму, оно работает, но проблема, когда пользователь нажимает кнопку «последние приложения» и слайд-приложение. Тогда приемник ничего не поймает.
В манифесте я объявил:
<receiver android:name=".MyReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.SCREEN_ON"/>
<action android:name="android.intent.action.SCREEN_OFF"/>
</intent-filter>
</receiver>
Моя основная деятельность (может быть, я что-то неправильно там):
public class MainActivity extends Activity {
private MyReceiver myReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
myReceiver = new MyReceiver();
registerReceiver(myReceiver, filter);
}
@Override
protected void onDestroy() {
if (myReceiver != null) {
unregisterReceiver(myReceiver);
myReceiver = null;
}
super.onDestroy();
}
}
и мой приемник:
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("android.intent.action.SCREEN_OFF")) {
Log.e("In on receive", "In Method: ACTION_SCREEN_OFF");
Toast.makeText(context, "DO SOMETHING",Toast.LENGTH_LONG).show();
}
else if (action.equals("android.intent.action.SCREEN_ON")) {
Log.e("In on receive", "In Method: ACTION_SCREEN_ON");
Toast.makeText(context, "DO SOMETHING2",Toast.LENGTH_LONG).show();
}
}
}
Действительно оцените, если вы можете взглянуть: D.
Спасибо
Итак, в __onDestroy() __ Мне нужно исключить предложение if if и в __onCreate() __ Мне нужно устранить только строки, в которых я создаю __myReceiver__ и __registerReceiver (myReceiver, filter) __ Если я понял это правильно, не так ли? – xampla
Да. Вы можете регистрировать широковещательные приемники через манифест или через Java-код. Поскольку вы уже зарегистрировали его в манифесте, в коде больше не нужно делать это. – Henry
К сожалению, он все еще не работает. Фактически теперь это не работает, даже если приложение работает. Есть идеи? – xampla