简体   繁体   中英

BroadcastReceiver not receiving Intent from inside Service

I've got an Activity and a Service in my app and I'm sending broadcasts to each of them from the other. While my activity receives the broadcast that's sent from my Service, my Service doesn't pick up the broadcast sent from my Activity.

Here's some of my code:

Activity

    @Override
public void onResume()
{
    Log.i(TAG, "in onResume");

    IntentFilter messageFilter = new IntentFilter(Constants.MESSAGE);
    messageReceiver receiver = new messageReceiver();
    registerReceiver(receiver, messageFilter);

    startService(new Intent(this, Server.class));

    super.onResume();
}

public class messageReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive (Context context, Intent intent)
    {
        Log.i(TAG, "in messageReceiver");
        serverStatus.setText(intent.getStringExtra(Constants.MESSAGE));
    }
}

@SuppressLint("ParserError")
public OnClickListener btnSendClicked = new OnClickListener() {

    public void onClick(View v) {
        Log.i(TAG, "btnSend clicked");

// This broadcast is NOT picked up by my Service
        Intent sendClicked = new Intent(Constants.SEND_CLICKED);
        sendBroadcast(sendClicked);
    }
};

Service

    @SuppressLint({ "ParserError", "ParserError", "ParserError" })
public class btnSendClickedReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context arg0, Intent arg1) {

        // Do some stuff
    }
};

@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
    Log.i(TAG, "in onStartCommand");

    SERVERIP = getLocalIpAddress();

    IntentFilter sendClickedFilter = new IntentFilter(Constants.SEND_CLICKED);
    btnSendClickedReceiver receiver = new btnSendClickedReceiver();
    registerReceiver(receiver, sendClickedFilter);

    runServer();

    return START_STICKY;
}

@SuppressLint("ParserError")
public void runServer()
{
    try
    {
        if (SERVERIP != null)
        {
            Log.i(TAG, "inside runServer");

// This broadcast is picked up by my activity:
            Intent intent = new Intent(Constants.MESSAGE);
            intent.putExtra(Constants.MESSAGE, "Listening on IP: " + SERVERIP);
            sendBroadcast(intent);
            serverSocket = new ServerSocket(SERVERPORT);
            while (true)
            {
                client = serverSocket.accept();
                Log.i(TAG, "connected");

                Intent connectedIntent = new Intent(Constants.MESSAGE);
                connectedIntent.putExtra(Constants.MESSAGE, "Connected");
                sendBroadcast(connectedIntent);


            }
        }
        else
        {
            // no internet connection
        }
    } catch (Exception e)
    {
        //Error
        e.printStackTrace();
    }
}

Manifest

        <activity
        android:name=".MainActivity"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />

            <action android:name="message"/>
            <action android:name="SendClicked"/>
        </intent-filter>
    </activity>

    <service android:name=".Server" android:process=":remote">
    </service>

I have been trying to debug this for days, but I'm not sure what the problem is. Any help is appreciated.

尚未在androidManifest.xml文件中输入BroadCast接收器条目,请添加以上条目并尝试。

I had the same issue. I took out the :remote specifier then it worked. I don't know why that made the difference. And I never specified receiver in the manifest either.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM