0

私のAndroidアプリケーションでユーザーに将来の通知を設定するのは初めてですが、alarmmanagerを使用して通知が設定された特定の日付にサービスクラスが呼び出されている間、putExtra文字列を取得していません。

活動クラス

utility.setInternalBroadcastNotification(*DYNAMIC_FUTUREDATE*, *DYNAMIC_MESSAGE*);

ユーティリティ クラス

public void setInternalBroadcastNotification(String eventAlertDateTime, String eventNotificationMessage) {
    try {
        if (!eventAlertDateTime.equalsIgnoreCase("") && !eventNotificationMessage.equalsIgnoreCase("")) {
            Intent myIntent = new Intent(mContext, InternalBroadcastReceiver.class);
            myIntent.putExtra("message", eventNotificationMessage);

            PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, (int) System.currentTimeMillis(), myIntent, PendingIntent.FLAG_UPDATE_CURRENT);

            Calendar calendar = new GregorianCalendar(getDefaultLocale());
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss", getDefaultLocale());
            Date eventAlertTime = simpleDateFormat.parse(eventAlertDateTime);
            calendar.setTime(eventAlertTime);

            AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
            alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
        }
    } catch (Exception exception) {
        exception.printStackTrace();
    }
}

InternalBroadcastReceiver は BroadcastReceiver を拡張します

@Override
public void onReceive(Context context, Intent intent) {
    Intent intet = new Intent(context, InternalMessageHandler.class);
intet.putExtra("message", intent.getStringExtra("message"));
    context.startService(intet);
}

InternalMessageHandler は Service を拡張します

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    super.onStartCommand(intent, flags, startId);

    String message = intent.getStringExtra("message");
return START_NOT_STICKY;
}

マニフェスト

<service android:name=".util.InternalMessageHandler" />

    <receiver android:name=".util.InternalBroadcastReceiver" />

最後に Service クラスからメッセージ文字列を取得できません。

4

1 に答える 1

0

pendingIntentブロードキャスト用にメッセージが追加されたため。そして、受信者が呼び出されたとき、メッセージは に渡されていませんInternalMessageHandler

@Override
public void onReceive(Context context, Intent intent) {
Intent intet = new Intent(context, InternalMessageHandler.class);
intet.putExtra("message", intent.getStringExtra("message"););
context.startService(intet);
}
于 2016-02-19T06:48:28.037 に答える