Как мне заставить этот BroadCastReceiver работать? - PullRequest
0 голосов
/ 02 мая 2020

Таким образом, я буквально попробовал почти каждый трюк в книге, чтобы запустить эту вещь. НО ТЩЕТНО. Вот почему я просто собираюсь поместить весь этот код здесь. Я не понимаю, почему это не должно работать. Никаких ошибок или ничего подобного. Только приемник никогда не запускается.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.broadcastmannankatta">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <receiver
            android:name=".MyReceiver"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.example.broadcastmannankatta" />
            </intent-filter>
        </receiver>
    </application>

</manifest>
package com.example.broadcastmannankatta;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO: This method is called when the BroadcastReceiver is receiving
        // an Intent broadcast.
        Toast.makeText(context, "YEAHA", Toast.LENGTH_LONG).show();
    }
}

package com.example.broadcastmannankatta;

import androidx.appcompat.app.AppCompatActivity;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;

import android.content.BroadcastReceiver;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompatActivity {

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

    public void sendbroadcast(View view) {
        Intent bIntent = new Intent();
        bIntent.setAction("com.example.broadcastmannankatta");
        sendBroadcast(bIntent);
    }
}

Мой пользовательский интерфейс получил кнопку, которая запускает метод sendbroadcast.

1 Ответ

0 голосов
/ 02 мая 2020

Как объяснено в Android официальной документации

Начиная с Android 8.0 (уровень API 26), система накладывает дополнительные ограничения на получателей, объявленных в манифесте.

Если ваше приложение настроено на Android 8.0 или выше, вы не можете использовать манифест для объявления получателя для большинства неявных трансляций (трансляций, которые не ориентированы конкретно на ваше приложение). Вы все еще можете использовать получателя, зарегистрированного в контексте, когда пользователь активно использует ваше приложение.

Поэтому, пожалуйста, следуйте инструкциям в ссылке, чтобы зарегистрироваться в своем настраиваемом получателе Получатель, зарегистрированный в контексте *

Не забудьте отменить регистрацию в приемнике, когда действие приостановлено или уничтожено.

...