0

選択した日の午前 9 時 40 分に毎週表示される通知を Android で作成しようとしています。ユーザーがこの通知を押すと、フラグメント アクティビティに移動するはずですが、どうすればそれを達成できますか?

私の現在のコード:

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;

import java.util.Calendar;

public class MainActivity extends AppCompatActivity {
static final int REQUEST_CODE = 0;
TextView tt;
final static int WEEK_Id=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Calendar calendar = Calendar.getInstance();
    String[] Categories = { "one","2","three"};
    tt=(TextView) findViewById(R.id.oooo);
    tt.setText(Categories[WEEK_Id]);

    // 8 AM Each day
    calendar.set(Calendar.HOUR_OF_DAY, 9);
    calendar.set(Calendar.MINUTE, 40);
    calendar.set(Calendar.SECOND, 0);
    Intent intent = new Intent(MainActivity.this, Receiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, REQUEST_CODE, intent, 0);
    AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
    am.setRepeating(am.RTC_WAKEUP, calendar.getTimeInMillis(), am.INTERVAL_DAY * 7, pendingIntent);
}
}

そしてレシーバーコード:

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;

public class Receiver extends BroadcastReceiver {
static final int reqCode=0;

public Receiver() {
}

@Override
public void onReceive(Context context, Intent intent) {
    showNotification(context);
}

public void showNotification(Context context) {
    Intent intent = new Intent(context, MainActivity.class);
    PendingIntent pi = PendingIntent.getActivity(context, reqCode, intent, 0);
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context)
            .setSmallIcon(R.drawable.food_recycleview)
            .setContentTitle("Title")
            .setContentText("one");
    mBuilder.setContentIntent(pi);
    mBuilder.setDefaults(Notification.DEFAULT_SOUND);
    mBuilder.setAutoCancel(true);
    NotificationManager mNotificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
    mNotificationManager.notify(reqCode, mBuilder.build());
}
}
4

1 に答える 1

0

アラームが鳴るのは、午前 9 時 40 分より前にアクティビティにアクセスした場合だけだと思います。

アラーム マネージャーが特定の瞬間にオフになるには、それが未来の瞬間である必要があり、それ以降は繰り返されます。

そのため、カレンダーをインスタンス化し、その時刻を将来の次の 9:40 に設定してから、アラームを設定する必要があります。

Calendar calendar = Calendar.getInstance();
//verify if the current time is past 9:40, then add one day
if (calendar.get(Calendar.HOUR) > 9 
        || (calendar.get(Calendar.HOUR) == 9 && calendar.get(Calendar.MINUTE) >= 40))
    calendar.add(Calendar.DATE, 1);
calendar.set(Calendar.HOUR_OF_DAY, 9);
calendar.set(Calendar.MINUTE, 40);
calendar.set(Calendar.SECOND, 0);

//次に、アラームのインテントを配置するときに、アクションを追加して、ブロードキャスト レシーバーがそれをフィルタリングできるようにする必要があります

Intent intent = new Intent(MainActivity.this, Receiver.class);
intent.setAction("com.name.package.ACTION_FOR_ALARM");
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, REQUEST_CODE, intent, 0);
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.setRepeating(am.RTC_WAKEUP, calendar.getTimeInMillis(), am.INTERVAL_DAY * 7, pendingIntent);

Broadcast Receiver では、着信インテントのアクションを確認する必要があります

ファイル: MyBroadcastReceiver.java

@Override
public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();

    //recibo la alarma
    if(action.contains("com.name.package.ACTION_FOR_ALARM")){
        [...]   // <-- your code for the notification
    }
 }

マニフェストのブロードキャストレシーバーにフィルターを登録することを忘れないでください。これにより、アプリはインテント アクションをフィルター処理できます。

<application>

    [...]

    <receiver android:name="MyBoradcastReceiver">
        <intent-filter >
            <action android:name="com.name.package.ACTION_FOR_ALARM" />
        </intent-filter>
    </receiver>

</application>
于 2016-11-18T23:38:15.843 に答える