Приемник радиовещания для Android не получает намерения

У меня есть два приложения, которые я сделал, и я пытаюсь отправить намерение от одного к другому, но намерение никогда не попадает в onReceive(), однако эта проблема является только одним способом. Первое приложение может отправить на второе, а второе не может отправить обратно информацию. Я использую другое намеренное действие для отправки от второго к первому, но в остальном они идентичны. Любые идеи о том, почему это может не работать? Я попробовал все, что мог придумать, и прочитал большинство сообщений, которые я мог найти здесь, но безрезультатно.

Это не сбой или не дает мне никаких указаний относительно того, что происходит в logcat, он просто ничего не делает.

отправить функцию

private void sendFinishLog(String ID, String Cond)
{
    Log.d("me", "send finish log");
    Intent logIntent = new Intent();
    logIntent.putExtra("ID", ID);
    logIntent.putExtra("Cond", Cond);
    logIntent.setAction("com.me.intent.finishlog");
    Log.d("me","logIntent : " + logIntent.toString()   
        +logIntent.getExtras().toString());
    sendBroadcast(logIntent);
}

получить класс

public class LogReceiver extends BroadcastReceiver {

    public static ArrayList<LogDataHolder> logData = new ArrayList<LogDataHolder>();
    private boolean found;
    static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    private static String lasttime;
    private static String now = "Boot time";
    @Override
    public void onReceive(Context cont, Intent logIntent) 
    {
        Log.d("me","On receive");
                etc.....
    }

Получение манифеста приложения

<!-- for receiving logs  -->
<receiver 
    android:name = "LogReceiver"
    android:enabled="true">
    <intent_filter>
        <action android:name="com.me.intent.finishlog" />
    </intent_filter>
</receiver>

Ответ 1

что-то вроде:

public void onResume() {
    IntentFilter filter = new IntentFilter();
    getActivity().registerReceiver(mLogReceiver,filter);
}

и для регистрации:

public void onPause() {
    getActivity().unregsiterReceiver(mLogreceiver);
}

изменить Я просто понял, что ваш класс LogReceiver не имеет конструктора. вам нужно будет написать одно:

private LogReceiver mLogReceiver = new LogReceiver() {

и после этого вы можете использовать метод onReceive, как будто он у вас уже есть в вашем коде.

Ответ 2

Попробуйте еще раз, как это. Возможно, необходимо добавить категорию

<receiver
    android:name = "LogReceiver"
    android:enabled="true">
    <intent-filter>
        <action android:name="com.me.intent.finishlog" />
         <category android:name="android.intent.category.DEFAULT"/> 
    </intent-filter>
</receiver>

Ответ 3

Вы заявили получателя в манифесте как:

    android:name = "LogReceiver"

В документации указано, что имя должно быть:

Название класса, реализующего широковещательный приемник, подкласс BroadcastReceiver. Это должен быть полностью квалифицированный класс имя (например, "com.example.project.ReportReceiver" ). Однако, как стенограмма, если первый символ имени - это период (для Например, "ReportReceiver" ), он добавляется к имени пакета указанный в элементе.

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

    android:name = ".LogReceiver"

или

    android:name = "com.me.yourpackagename.LogReceiver"

Ответ 4

Моя проблема была решена, когда я удалил регистратор без регистрации из OnPause(). Метод.