Урок 100. Service. IntentService. Foreground. Автозагрузка сервиса

Обсуждение уроков
Mkay
Сообщения: 3
Зарегистрирован: 21 авг 2015, 18:02

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Mkay » 24 авг 2015, 11:46

mkw, к сожалению, это тоже не сработало :(

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Mikhail_dev » 24 авг 2015, 11:59

Не знаю, прошлый вариант по мне рабочий. У нас почти такой же, рабочий
[syntax=xml]
<application
... >
<receiver
android:name=".MyBootReceiver"
android:enabled="true"
android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
</application>
[/syntax]
Стоять это должно в теге application!

Mkay
Сообщения: 3
Зарегистрирован: 21 авг 2015, 18:02

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Mkay » 24 авг 2015, 16:58

Нашел причину, странноватая она оказалась. Эта строчка оказалась неработающей:
<uses-permission android:name="ANDROID.PERMISSION.RECEIVE_BOOT_COMPLETED" />

Как только я исправил ее на
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
всё сразу заработало.

Странно, подумал я, ведь, можно сказать, я вручную почти и не писал этот permission, а всего лишь начал писать "BOO", потом нажал Enter на первом предложенном варианте, после чего Android Studio (v1.3.1) услужливо дописал за меня "ANDROID.PERMISSION.RECEIVE_BOOT_COMPLETED". Сегодня, когда я, наконец, каким-то чудом нашел причину проблемы, то решил попробовать начать писать не "BOO", а "boo". Строка после нажатия Enter стала выглядеть вот так: "android.permission.RECEIVE_BOOT_COMPLETED". Такие дела. Как обычно, смог проверить на Android 4.0.4 и 4.2.2.
Не знаю, проявляет ли себя эта проблема у кого-нибудь еще, но мне она стоила трех потерянных дней и почти всех волос на заднице.

Mikhail_dev, спасибо за информацию насчет QUICKBOOT_POWERON, буду теперь знать. Такой вопрос вдогонку, может ли ресивер за одну загрузку поймать и BOOT_COMPLETED, и QUICKBOOT_POWERON? Или система при загрузке отсылает что-то одно из этого? То есть, имеет ли смысл что-то предпринимать, чтобы ресивер не выполнил onRecieve() два раза?

Chvalov
Сообщения: 24
Зарегистрирован: 28 мар 2014, 16:57

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Chvalov » 25 сен 2015, 11:52

Как можно отправить задачу по нажатии кнопки, а не в onCreate ?

Допустим в OnClick_On1 выполнить

Код: Выделить всё

startService(intent.putExtra("time", 1).putExtra("label", "Call 2"));
[syntax=java]public class MainActivity extends AppCompatActivity {
TextView TV_Errors, TV_Otvet;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TV_Errors = (TextView) findViewById(R.id.TV_Errors);
TV_Otvet = (TextView) findViewById(R.id.TV_Otvet);

Intent intent = new Intent(this, SendWriteDataIntentService.class); //Инициализация сервиса

startService(intent.putExtra("time", 3).putExtra("label", "Call 1"));
startService(intent.putExtra("time", 1).putExtra("label", "Call 2"));
startService(intent.putExtra("time", 4).putExtra("label", "Call 3"));

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

public void OnClick_On1(View view) {

}

public void OnClick_On2(View view){

}

public void OnClick_On3(View view){

}


public void OnClick_Exit(View view){
finish();
}
}[/syntax]

Аватара пользователя
Kirill
Сообщения: 19
Зарегистрирован: 09 сен 2015, 13:53

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Kirill » 25 сен 2015, 18:03

Chvalov писал(а):Как можно отправить задачу по нажатии кнопки, а не в onCreate ?

Допустим в OnClick_On1 выполнить

Код: Выделить всё

startService(intent.putExtra("time", 1).putExtra("label", "Call 2"));
[syntax=java]public class MainActivity extends AppCompatActivity {
TextView TV_Errors, TV_Otvet;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

TV_Errors = (TextView) findViewById(R.id.TV_Errors);
TV_Otvet = (TextView) findViewById(R.id.TV_Otvet);

Intent intent = new Intent(this, SendWriteDataIntentService.class); //Инициализация сервиса

startService(intent.putExtra("time", 3).putExtra("label", "Call 1"));
startService(intent.putExtra("time", 1).putExtra("label", "Call 2"));
startService(intent.putExtra("time", 4).putExtra("label", "Call 3"));

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

public void OnClick_On1(View view) {

}

public void OnClick_On2(View view){

}

public void OnClick_On3(View view){

}


public void OnClick_Exit(View view){
finish();
}
}[/syntax]
1. методы пишутся с маленькой буквы
2. Урок 9. Обработчики событий на примере Button.

Аватара пользователя
Kirill
Сообщения: 19
Зарегистрирован: 09 сен 2015, 13:53

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Kirill » 25 сен 2015, 18:06

Mkay писал(а):Нашел причину, странноватая она оказалась. Эта строчка оказалась неработающей:
<uses-permission android:name="ANDROID.PERMISSION.RECEIVE_BOOT_COMPLETED" />

Как только я исправил ее на
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
всё сразу заработало.

Странно, подумал я, ведь, можно сказать, я вручную почти и не писал этот permission, а всего лишь начал писать "BOO", потом нажал Enter на первом предложенном варианте, после чего Android Studio (v1.3.1) услужливо дописал за меня "ANDROID.PERMISSION.RECEIVE_BOOT_COMPLETED". Сегодня, когда я, наконец, каким-то чудом нашел причину проблемы, то решил попробовать начать писать не "BOO", а "boo". Строка после нажатия Enter стала выглядеть вот так: "android.permission.RECEIVE_BOOT_COMPLETED". Такие дела. Как обычно, смог проверить на Android 4.0.4 и 4.2.2.
Не знаю, проявляет ли себя эта проблема у кого-нибудь еще, но мне она стоила трех потерянных дней и почти всех волос на заднице.

Mikhail_dev, спасибо за информацию насчет QUICKBOOT_POWERON, буду теперь знать. Такой вопрос вдогонку, может ли ресивер за одну загрузку поймать и BOOT_COMPLETED, и QUICKBOOT_POWERON? Или система при загрузке отсылает что-то одно из этого? То есть, имеет ли смысл что-то предпринимать, чтобы ресивер не выполнил onRecieve() два раза?
это глюк Андроид Студио, у них по этому поводу открыт тикет, но пока что-то не фиксят.
Автодополнение начатое с больших букв дополнняет всю строку большими буквами. Это первый косяк.
А второй это что в манифесте такие имена из одних заглавных валидатор пропускает и не видит, хотя они не валидные.

Pavel_PSS
Сообщения: 2
Зарегистрирован: 31 мар 2018, 10:22

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение Pavel_PSS » 31 мар 2018, 10:31

Привет, спасибо за уроки. Кто нить может помочь, этой мой проект в андройд студии https://yadi.sk/d/vpGbyS0E3Tw3Fv пытаюсь сделать сервис который продолжал работать после закрытия (удаление из памяти) основной программы. Сервис показывает статус батареи. Перепробовал кучу вариантов, но сервис все равно тоже отключается. Нужно чтобы он работал, оставался включенным и если видел что само приложение закрылось его открывал заново. Если можете поправьте мой код

olelukoe
Сообщения: 1
Зарегистрирован: 30 апр 2018, 22:13

Re: Урок 100. Service. IntentService. Foreground. Автозагруз

Сообщение olelukoe » 30 апр 2018, 22:14

похоже, что ктото у когото чтото спёр....
http://developer.alexanderklimov.ru/and ... ervice.php

Ответить