web-dev-qa-db-ja.com

Android放送受信機が意図を受信して​​いない

私が作成したアプリが2つあり、インテントを別のインテントに送信しようとしていますが、インテントがonReceive()に到達しないのですが、この問題は一方向に過ぎません。最初のアプリは2番目のアプリに送信できますが、2番目のアプリは情報を返信できません。 2番目から最初の送信に別のインテントアクションを使用していますが、それ以外は同じです。これが機能しない理由についてのアイデアはありますか?私は思いつく限りのことをすべて試し、ここで見つけることができるほとんどの投稿を読みましたが、役に立ちませんでした。

それはクラッシュしておらず、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>
14
Cob50nm

何かのようなもの:

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

登録解除の場合:

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

編集:私は、LogReceiver-classにもコンストラクタがないことを理解しました。あなたも1つ書く必要があります:

private LogReceiver mLogReceiver = new LogReceiver() {

その後、コードにすでにあるように、onReceiveメソッドを使用できます。

7
bofredo

このようにもう一度試してください。カテゴリを追加する必要があるかもしれません

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

OnPause()からレシーバーの登録解除を削除すると、問題が解決しました。方法。

1
shiny vn

マニフェストでレシーバーを次のように宣言しました。

    Android:name = "LogReceiver"

documentation は、名前を次のようにする必要があることを示しています。

BroadcastReceiverのサブクラスである、ブロードキャストレシーバーを実装するクラスの名前。これは完全修飾クラス名( "com.example.project.ReportReceiver"など)である必要があります。ただし、略称として、名前の最初の文字がピリオド(たとえば、 "。ReportReceiver")の場合、要素で指定されたパッケージ名に追加されます。

つまり、パッケージを含める必要があります。名前を次のように変更してみてください:

    Android:name = ".LogReceiver"

または

    Android:name = "com.me.yourpackagename.LogReceiver"
1