Приемник вещает слишком часто
У меня проблема с тем, что мое приложение постоянно вводит метод onReceive, и я не уверен, почему. Я ввел несколько операторов журнала, но до сих пор не понимаю, почему вызывается onReceive. Я провел некоторое исследование, оглядываясь по сторонам, просто пытаясь найти примеры использования BroadcastReceiver и AlarmManager, и я следил за этим примером проекта и обнаружил много других сообщений о том, что пользователи не могут получать широковещательные сообщения, но ни одного о пользователях, получающих слишком много.
Вот часть моего кода:
AlarmClock.java:
public class AlarmClock extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
wl.acquire();
Log.d("TAG", "Signal Recieved");
SetAlarm(context);
wl.release();
}
public void SetAlarm(Context context){
AlarmManager am = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(context, AlarmService.class);
PendingIntent pi = PendingIntent.getService(context, 0, i, 0);
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 32000, pi);
Log.d("TAG", "Alarm Set");
}
}
AlarmService.java:
public class AlarmService extends IntentService {
public AlarmService(){
super("AlarmService");
}
@Override
protected void onHandleIntent(Intent intent) {
Log.d("TAG", "onHandleIntent");
//operation to be completed
}
}
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.allen.repeatdialer" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
...
<receiver android:name=".AlarmClock">
<intent-filter>
<action android:name="com.example.allen.repeatdials.CALL_PLACED"/>
</intent-filter>
</receiver>
<service android:name=".AlarmService"></service>
</application>
...
<uses-permission android:name="android.permission.WAKE_LOCK"/>
</manifest>
Приложение будет отображать только Log.d("TAG", "onHandleIntent"); когда я вызываю sendBroadcast(), но другие операторы журнала отображаются каждые 32 секунды. Но также, после того, как я вызываю sendBroadcast () один раз, Log.d("TAG", "onHandleIntent"); также будет отображаться каждые 32 секунды.
РЕДАКТИРОВАТЬ (код, который вызывает sendBroadcast()):
public class HomeScreen extends Activity implements OnClickListener {
//*******************************************************
//* On Create *
//*******************************************************
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home_screen);
}
...
@Override
public void onClick(View arg0){
switch (arg0.getId()){
case R.id.bContact:
displayContacts(Names, IDs);
Log.d("TAG", "Contacts Pressed");
break;
case R.id.bStartDial:
Log.d("TAG", "Dial Pressed");
startDial();
break;
default:
break;
}
}
/* This method is responsible for placing the phone call. */
public void startDial(){
//performs call
if (!phoneNumber.equals("")) {
Uri number = Uri.parse("tel:" + phoneNumber);
Intent dial = new Intent(Intent.ACTION_CALL, number);
Intent intent = new Intent(this, AlarmClock.class);
intent.setAction("com.example.allen.repeatdialer.CALL_PLACED");
sendBroadcast(intent);
startTime = System.currentTimeMillis();
startActivityForResult(dial, DIAL_COMMENCED);
}
}
}
Просто для того, чтобы добавить некоторую справочную информацию об этом приложении, у меня было все нормально, с помощью обработчика, но обработчик не работает, если процессор спит, поэтому я не пытаюсь изменить приложение для использования AlarmManager. Поэтому я знаю, что моя проблема заключается в отправке трансляций и их получении.