0

起動時にアラームを設定し、AlarmManager を介して定期的に IntentService を呼び出そうとしています。AlarmReceiver がトリガーされることはありません。理由はわかりません。

ブートレシーバー:

package com.company.android;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.text.format.Time;

public class BootBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Time now = new Time();
        now.setToNow();

        Log.e("#######################COMM", "Booting up " + now.toString());

        Intent alarmIntent = new Intent("com.company.android.AlarmReceiver");
        PendingIntent pi = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis(), 1000 * 5, pi);

        Log.e("#######################COMM", "Booted up " + now.toString());
    }
}

アラーム受信者:

package com.company.android;

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

/**
 * Created by mlaino on 7/8/13.
 */
public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("COMM", "Pre");


        Intent i = new Intent("com.company.android.PollingService");
        context.startService(i);

        Log.d("COMM","Pos");

    }
}

マニフェスト:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  package="com.company.android" android:versionCode="1" android:versionName="1.0-SNAPSHOT">
    <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="15" />
  <application android:icon="@drawable/icon" android:label="@string/app_name">
    <receiver android:name=".BootBroadcastReceiver"
            android:enabled="true"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </receiver>
      <receiver android:name=".AlarmReceiver">
          <intent-filter>
              <action android:name="com.company.android.AlarmReceiver" />
          </intent-filter>
      </receiver>

      <activity android:name=".CommunicationsManagerActivity">
          <intent-filter>
              <action android:name="android.intent.action.MAIN" />
              <category android:name="android.intent.category.LAUNCHER" />
          </intent-filter>
      </activity>
      <service android:name=".PollingService" >
          <intent-filter>
              <action android:name="com.company.android.PollingService" />
          </intent-filter>
      </service>
  </application>

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

手がかりはありますか?

ありがとう

4

1 に答える 1

1

まず、受信者を呼び出しているものは何でもその許可を保持する必要android:permission="android.permission.RECEIVE_BOOT_COMPLETED"があると言っているので、削除してください。

次に、再起動する前に必ずアクティビティの 1 つを実行してください。マニフェスト登録BraodcastReceiversは、コンポーネントの 1 つを明示的に実行するまで機能しません。これは通常、ユーザーがアクティビティを起動することによって実行されます。

于 2013-07-09T14:53:23.563 に答える