Broadcast Reciever, I Я правильно делаю? - PullRequest
0 голосов
/ 18 марта 2020

первый вопрос здесь ... У меня есть эта практика из моего колледжа, но курс иногда не объясняет все, и это о трансляции и получении сообщения Тост.

(Некоторые вещи будут в испанском sh)

Видите ли, первое приложение, которое имеет представление с кнопкой: Представление активности

Единственное, что он делает, это отправляет сообщение через кнопку, и OnClick связал этот метод, который находится в Activity, с именем Emisora. java (нет основной операции, но он настроен для этой операции запуска) :

public void Emision(View v){
        Intent intent = new Intent();
        intent.setAction("com.tecmilenio.practica91");
        intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
        sendBroadcast(intent);
    }

Манифест:

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

    <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=".Emisora">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

</manifest>

Затем у меня есть другое приложение, которое не имеет активности, но у него есть Broadcast Reciever:

package com.tecmilenio.receptor;

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

public class BroadcastReceptor extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "Transmission Recieved", Toast.LENGTH_SHORT).show();
    }
}

(я знаю, что тост за это не лучшая практика, но только для практики курса)

И его Манифест:

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

    <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">
        <receiver
            android:name=".BroadcastReceptor"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.tecmilenio.practica91"/>
            </intent-filter>
        </receiver>
    </application>

</manifest>

И когда я установить и выполнить первый, просто ничего не происходит ж, я нажимаю кнопку, но ничего не происходит.

Затем я позже увидел, что во втором проекте (приемнике), когда я выполняю его из Android Studio, приложение не появляется в телефоне, не выполнять ничего, но я думал, что это нормально из-за отсутствия активности в нем. Затем я также увидел, что при выполнении через студию консоль запуска также отправляет мне сообщение «Превышено время ожидания процесса (com.tecmilenio.receptor) для появления на xiaomi-mi_8-2ef63c6e.» , возможно это есть что-то (?)

Буду признателен, если кто-нибудь мне это объяснит ... Спасибо!

Обновление

Я обнаружил, что проблема должна быть связана с тем, что тайм-аут при запуске, добавление действия без чего-либо и запуск этого действия, заставляет его работать, однако это не то, что он должен делать, предполагается, что он не должен иметь никакой активности и должен выполняться OnRecieve, когда приложение «Practica91» отправляет сообщение ... Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Я думаю, здесь есть небольшая ошибка. Вы отправляете в качестве действия в первом приложении следующую строку com.tecmilenio.emision. В то время как во втором приложении вы регистрируете действие трансляции, как показано ниже

<action android:name="com.tecmilenio.practica91"/>

Первым изменением будет переименование действия трансляции в com.tecmilenio.emision.

   <receiver
            android:name=".BroadcastReceptor"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.tecmilenio.emision"/>
            </intent-filter>
        </receiver>

Другим важным моментом является то, что при отправке широковещания добавьте флаг FLAG_INCLUDE_STOPPED_PACKAGES к цели, поскольку при трансляции из приложения A в приложение B приложение B может не работать, этот флаг гарантирует, что широковещательная передача охватит даже приложения, которые не запущены :

С уважением, я тоже мексиканец!

0 голосов
/ 18 марта 2020

Установить действие, объявленное в манифесте, и отправка широковещательной рассылки из действия отличается.

попробуйте использовать одно и то же действие в обоих местах -

 Intent intent = new Intent();
 intent.setAction("com.tecmilenio.practica91");
 intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
 sendBroadcast(intent);
...