Я создал активность, которая предназначена только для запуска из ссылки (с использованием фильтра намерений.) Я не хочу, чтобы в этом мероприятии был графический интерфейс - я просто хочу, чтобы он запускал службу и поставьте уведомление в баре. Я попытался поместить фильтр намерений для ссылки в свою службу, но это не работает. Есть ли лучшее, что можно сделать, чтобы ответить на фильтры намерений - или я могу просто заставить свою деятельность не иметь графический интерфейс?
Извините, если я запутываюсь, IsaacАктивность Android без GUI
ответ
Ваш лучший выбор, казалось бы, использует BroadcastReceiver
. Вы можете создать новый BroadcastReceiver, ожидающий Намерению, чтобы вызвать ваше уведомление и начать службу, как это:
public class MyIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context _context, Intent _intent) {
if (_intent.getAction().equals(MY_INTENT)) {
// TODO Broadcast a notification
_context.startService(new Intent(_context, MyService.class));
}
}
}
И вы можете зарегистрировать этот IntentReceiver непосредственно в приложении Manifest без необходимости включать его в пределах деятельности:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.domain.myapplication">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<service android:enabled="true" android:name="MyService"></service>
<receiver android:enabled="true" android:name="MyIntentReceiver">
<intent-filter>
<action android:name="MY_INTENT" />
</intent-filter>
</receiver>
</application>
</manifest>
, пожалуйста, скажите мне, что такое MY_INTENT в _intent.getAction(). Equals (MY_INTENT), извините, если я наизусть, я просто новичок. –
Вы можете использовать любую String, которую хотите определить для своих целей. Он должен быть уникальным. Я предлагаю вам использовать «your.package.name.START_SERVICE» –
Я не уверен, что служба будет работать, но приемник вещания определенно не будет. Url запускаются с использованием startActivity(). Приемники вещания не могут ответить на это.
http://developer.android.com/reference/android/content/BroadcastReceiver.html
FTA: Обратите внимание, что, хотя Намерение класса используется для отправки и получения этих передач, Намерение широковещательного механизма здесь совершенно отдельно от намерений, которые используются, чтобы начать деятельность с Context.startActivity() , Нет возможности для BroadcastReceiver видеть или захватывать намерения, используемые с startActivity(); Аналогично, когда вы передаете намерение, вы никогда не найдете или не начнете действие.
Использование службы. Я работаю определенно. Когда вы нажимаете на программу, она будет работать без GUI. Используйте pendintgintent ... getService (MySerice.class ....). Затем создайте новый класс MyService, расширяющий класс Service. Внутри MyService.class переопределите onStart() и сделайте все, что хотите.
Повторяя предыдущий ответ, вы не должны использовать широковещательный приемник.
В той же ситуации, что я должен был объявить тему Thusly:
<activity android:name="MyActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoDisplay">
Этот ответ должен иметь больше приоритетов, потому что он отвечает на точный вопрос, который был задан. Другие ответы очень верны, но на самом деле это очень полезно и отвечает на заданный вопрос. – prolink007
Увы, я ответил хорошо после того, как он был опубликован, что, вероятно, объясняет, почему этого не произошло. Получил мне знак некроманта из сделки, а также ваш комментарий, который заставил меня улыбнуться :) – JoeHz
Это правильный ответ ABSOLUTE, так как есть вещи, которые вы не можете сделать с BroadcastReceiver. В настоящее время я столкнулся с проблемой, используя USB-устройства. Использование приемника широковещательной передачи вместо активности заставляет приложение потерять разрешение при каждом отключении! – blender
Теперь я понимаю, что деятельность только GUI, и это их цель, поэтому я должен использовать службу или что-то другое. Спасибо, Isaac –