0

私のコードは Alarm Manager Example (他の質問のコード) を実装していますが、私の alarmReceiver(extends BroadcastReceiver) は機能していません。MainActivity がインテントを起動していないのか、alarmReceiver がうまく登録されていないのかわかりません。

したがって、私のalarmServiceも機能していません(Receiverが機能していないため)。

そして、manifest.xml に許可を書きました。

ここに関連するコードがあります。誰かがこの問題で私を助けてくれることを願っています。どうもありがとう。


getBox.java


 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.getbox);


    /// 
    Intent intent = new Intent(getBox.this, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(getBox.this, 0, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (5 * 1000), pendingIntent);
    Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();

AlarmReceiver.java


 public class AlarmReceiver extends BroadcastReceiver {
  @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("ALARM_RECEIVER", "WORKING!!!");
        notificationStatus(context);

    }
    private void notificationStatus(Context context) {
        final NotificationManager mNotificationManager = (NotificationManager) 
                context.getSystemService(Context.NOTIFICATION_SERVICE);
                final int icon = R.drawable.icon;
        final CharSequence tickerText = context.getString(R.string.app_name);
        final long when = System.currentTimeMillis();
        final Notification notification = new Notification(icon, "ALARM_TEXT_1", when);
        final Intent notificationIntent = new Intent(context.getApplicationContext(),   getBox.class);
        final PendingIntent contentIntent = PendingIntent.getActivity(
                context.getApplicationContext(), 0, notificationIntent, 0);
                notification.setLatestEventInfo(context, tickerText, "ALARM_TEXT_2", contentIntent);
        mNotificationManager.notify(1, notification);
    }
}

AlarmService.java


 public class AlarmService extends WakefulIntentService {
  public AlarmService() {
    super("AlarmService");
  }

  @Override
  protected void doWakefulWork(Intent intent) {
    File log=new File(Environment.getExternalStorageDirectory(),
                      "AlarmLog.txt");
    Log.d("ALARM_SERVICE", "WORKING");
    try {
      BufferedWriter out=new BufferedWriter(
                            new FileWriter(log.getAbsolutePath(),
                                            log.exists()));

      out.write(new Date().toString());
      out.write("\n");
      out.close();

    }
    catch (IOException e) {
      Log.e("AppService", "Exception appending to log file", e);
    }
  }
}

OnBootReceiver.java


 public class OnBootReceiver extends BroadcastReceiver {
  private static final int PERIOD=3000;   // 3 sec

  @Override
  public void onReceive(Context context, Intent intent) {
    AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    Intent i=new Intent(context, AlarmReceiver.class);
    PendingIntent pi=PendingIntent.getBroadcast(context, 0,
                                              i, 0);

    mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                      SystemClock.elapsedRealtime()+60000,
                      PERIOD,
                      pi);
  }
}

WakefulIntentService.java


 abstract public class WakefulIntentService extends IntentService {
  abstract void doWakefulWork(Intent intent);

  public static final String LOCK_NAME_STATIC="com.commonsware.android.syssvc.AppService.Static";
  private static PowerManager.WakeLock lockStatic=null;

  public static void acquireStaticLock(Context context) {
    getLock(context).acquire();
  }

  synchronized private static PowerManager.WakeLock getLock(Context context) {
    if (lockStatic==null) {
      PowerManager mgr=(PowerManager)context.getSystemService(Context.POWER_SERVICE);

      lockStatic=mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
                            LOCK_NAME_STATIC);
      lockStatic.setReferenceCounted(true);
    }

    return(lockStatic);
  }

  public WakefulIntentService(String name) {
    super(name);
  }

  @Override
  final protected void onHandleIntent(Intent intent) {
    try {
      doWakefulWork(intent);
    }
    finally {
      getLock(this).release();
    }
  }
}

マニフェスト.xml

<application android:icon="@drawable/icon" android:label="@string/app_name">
    <activity android:screenOrientation="portrait" android:name=".Mail"></activity>
    <activity android:screenOrientation="portrait" android:name=".getBox">
    </activity>
    <activity android:screenOrientation="portrait" android:name=".mainPage"></activity>
    <activity android:screenOrientation="portrait" android:name=".sendBox"></activity>        
    <activity android:screenOrientation="portrait" android:name=".main" android:label="@string/app_name">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <provider android:name=".DataProvider" android:authorities="com.fleax.vocalclip.dataprovider" />
<receiver android:name=".OnBootReceiver">
     <intent-filter>
          <action android:name="android.intent.action.BOOT_COMPLETED" />
     </intent-filter>
</receiver>
<receiver android:name=".AlarmReceiver"></receiver>
<service android:name=".AlarmService"></service>
</application
4

2 に答える 2