簡體   English   中英

BroadcastReceiver沒有從內部服務接收Intent

[英]BroadcastReceiver not receiving Intent from inside Service

我的應用程序中有一個“活動”和“服務”,我正在彼此之間發送廣播。 當我的活動接收到從我的服務發送的廣播時,我的服務沒有收到我的活動發送的廣播。

這是我的一些代碼:

活動

    @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);
    }
};

服務

    @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();
    }
}

表現

        <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>

我已經嘗試調試了好幾天,但是我不確定是什么問題。 任何幫助表示贊賞。

尚未在androidManifest.xml文件中輸入BroadCast接收器條目,請添加以上條目並嘗試。

我遇到過同樣的問題。 我拿出:remote說明符,然后它起作用了。 我不知道為什么會有所不同。 而且我也從未在清單中指定接收者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM