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>
您的代码可能无法识别您的收件人,因为不知道他们的包裹。帮到你就告诉我,祝你好运!
我是 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>
您的代码可能无法识别您的收件人,因为不知道他们的包裹。帮到你就告诉我,祝你好运!