Приемник вещает слишком часто

У меня проблема с тем, что мое приложение постоянно вводит метод 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. Поэтому я знаю, что моя проблема заключается в отправке трансляций и их получении.

0 ответов

Другие вопросы по тегам