BroadCastReceiver Android

BroadCastReceiver Android

我是 android 的新手,我在项目中遇到广播接收器问题。

我在 AndroidManifest.xml 中创建了使用权限和接收者,创建了 class 但它没有传递 logcat 消息。

我的收件人CLASS

package com.polifrete.polifreteFunctions;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class MyReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        Log.i("Script", "Passou AQUI");
        Intent i = new Intent(context, VerificaNovoFreteService.class);
        context.startService(i);
    }
}

我的ANDROIDMANIFEST.XML

    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

    <receiver android:name="com.polifrete.polifreteFunctions.MyReceiver" >
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
            </intent-filter>
    </receiver>

我做错了什么?请帮帮我!

并非每个 Phone 都会发送 BOOT_COMPLETED 广播。例如,我认为是 HTC,发送 QUICKBOOT_POWERON 广播,如果它已启动。此外,您的 logcat 在启动时可能未连接到您的 phone。我建议创建一个 Toast 来检查你的 Boot-Reciever 是否被执行。

您可以使用以下代码创建此 Toast

Toast toast = Toast.makeText(getApplicationContext(), "Boot-Reciever Started", Toast.LENGT_LONG);

@Felipe A.,您可能对 CPU 有疑问...官方文档对此进行了讨论,并表示最好的用途是 WakefulBroadcastReceiver 保证 CPU 将保留醒了,你可以看看这个post 说说:

这是我使用 WakefulBroadcastReceiver 的代码:

public class GcmBroadcastReceiver extends WakefulBroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        // Explicitly specify that GcmIntentService will handle the intent.
        ComponentName comp = new ComponentName(context.getPackageName(),
            GcmIntent_Service.class.getName());
        // Start the service, keeping the device awake while it is launching.
        startWakefulService(context, (intent.setComponent(comp)));
        setResultCode(Activity.RESULT_OK);
    }
}

gcm 接收器需要将您的包添加到您的 intent-filter 中,这是与我的代码的唯一区别。我的接收器有这个代码:

    <receiver
        android:name=".App_Services.GcmBroadcastReceiver"
        android:permission="com.google.android.c2dm.permission.SEND" >
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />/>
            <category android:name="your.package" />
        </intent-filter>
    </receiver>

您的代码可能无法识别您的收件人,因为不知道他们的包裹。帮到你就告诉我,祝你好运!