2016-01-02 2 views
3

В настоящее время я пытаюсь создать Activity на Android с возможностями общения с запущенным BroadcastReceiver внутри службы, но я не могу это сделать хорошо. Я действительно не знаю, что может быть с тех пор (я думаю), я выполнил все необходимые шаги.Android BroadcastReceiver внутри службы: проблемы

У меня есть другие мероприятия, которые могут общаться с этим BroadcastReceiver без проблем. Код, который я использую для того, у меня возникли проблемы с заключается в следующем:

Регистрация имени действия в файле ActivityList.java (Другая деятельность):

public static final String ACTION1 = "com.test.ActionOne"; 
public static final String ACTION2 = "com.test.ActionTwo"; 

Регистрация действий с IntentFilter в файле GestTree.java, который проходит в Service:

Внутри onCreate():

IntentFilter filter; 
filter = new IntentFilter(); 
filter.addAction(ActivityList.ACTION1); 
filter.addAction(ActivityList.ACTION2); 
rec = new Receptor(); // This is a class which extends BroadcastReceiver 
registerReceiver(receptor, filter); 

Внутри функции onReceive() из private class Receptor из GestTree.java, которая простирается BroadcastReceiver:

public final void onReceive(final Context context, final Intent intent) { 
    String action = intent.getAction(); 
    if (action.equals(ActivityList.ACTION1)) { 
    Log.d(tag, "Test Passed!"); 
    } 
} 

Определение службы и деятельности State3Activity (тот, который я хочу общаться со службой) в AndroidManifest.xml:

<activity 
    android:name="State3Activity" 
    android:label="@string/app_name" >  
</activity> 

<service 
    android:name="GestTree" 
    android:enabled="true" 
    android:label="@string/app_name" > 
</service> 

Код внутри State3Activity.java:

public class State3Activity extends Activity { 
Button mButton; 
EditText editText_Name; 
EditText editText_Desc; 
private final String tag = this.getClass().getSimpleName(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.state3_layout); 
    mButton = (Button)findViewById(R.id.button_myButton); 
    editText_Nombre = (EditText)findViewById(R.id.editText_Name); 
    editText_Descripcion = (EditText)findViewById(R.id.editText_Desc); 

    mButton.setOnClickListener(
      new View.OnClickListener() 
      { 
       public void onClick(View view) 
       { 
        Intent intent; 
        intent = new Intent(); 
        intent.setAction(ActivityList.ACTION1); 

        // I have tried with all this combination of lines 
        // but none of them works 
        //intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); 
        //intent.setClass(State3Activity.this, GestTree.class); 
        //intent.addCategory(Intent.CATEGORY_DEFAULT); 
        sendBroadcast(intent); 

       } 
      }); 
} 

Существует проблема. Когда я нажимаю кнопку, это намерение никогда не входит в функцию onReceive() класса. Что я ухожу?

+0

Добро пожаловать в StackOverflow! Я улучшил ваш вопрос при правильном форматировании, и последние два абзаца были лишними, поэтому я удалил их - сосредоточиться на проблеме, не нужно писать «спасибо» и т. Д. Вы можете поблагодарить людей за помощь, отстаивая их ответы или принимая окончательный ответ , –

+0

Хорошо, я довольно новичок в этом, извините. @DamianKozlak – Alberto

+0

Почему вы вообще используете «BroadcastReceiver»? почему вы не разговариваете напрямую с вашим «Сервисом»? – pskink

ответ

2

Вы уверены, что начал работу? Если вы не запустили службу, метод onCreate() не будет выполнен, и ресивер не будет зарегистрирован.

+0

Хорошо, да, это была Лорен! Мне пришлось начать службу в другом месте, где я отправил sendBroadcast! Большое спасибо – Alberto

+0

Добро пожаловать. –

Смежные вопросы