25

AlarmReceiverたとえば、10秒後にアクティビティを開始する必要があります。アプリを実行せずにアクティブ化する必要があります。ただし、アプリが実行されているかどうかにAlarmReceiver関係なく、呼び出されません。助言がありますか?

Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 111, intent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

//alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() 
                                          //+ (10 * 1000), pendingIntent);
Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show();
4

5 に答える 5

42
public class AlarmReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
          String message = "Hellooo, alrm worked ----";
          Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
          Intent intent2 = new Intent(context, TripNotification.class); 
          intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
          context.startActivity(intent2);
    }

    public void setAlarm(Context context){
        Log.d("Carbon","Alrm SET !!");

        // get a Calendar object with current time
         Calendar cal = Calendar.getInstance();
         // add 30 seconds to the calendar object
         cal.add(Calendar.SECOND, 30);
         Intent intent = new Intent(context, AlarmReceiver.class);
         PendingIntent sender = PendingIntent.getBroadcast(context, 192837, intent, PendingIntent.FLAG_UPDATE_CURRENT);

         // Get the AlarmManager service
         AlarmManager am = (AlarmManager) context.getSystemService(context.ALARM_SERVICE);
         am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), sender);
    }
}

これは私がうまくいくことができた最後のコードです。追加する必要があります

 <receiver  android:process=":remote" android:name="AlarmReceiver"></receiver>

</application>マニフェストファイルのタグのすぐ上。

これにより、メソッドを呼び出してから30秒後にトリガーするアラームが設定されますSetAlarm()

于 2012-05-21T13:44:31.497 に答える
6

現在のところ、アプリを実行せずにアラームを開始することはできません。アラームをアクティブにするには、それぞれのアプリを一度実行する必要があります。このために.... !!

あなたのALARM_ACTIVITYで:

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

Intent intent = new Intent(ALARM_ACTIVITY.this,ALARM_RECEIVER.class); 

PendingIntent pendingIntent = PendingIntent.getBroadcast(SetReminder.this, ID, intent, PendingIntent.FLAG_UPDATE_CURRENT);

alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeInMillis() + 1000, pendingIntent);

あなたのALARM_RECEIVERで

NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

notification = new Notification(R.drawable.alarmicon, "charSequence", System.currentTimeMillis());

notification.setLatestEventInfo(context, "alarmTitle", "charSequence", pendingIntent);

notification.flags |= Notification.FLAG_AUTO_CANCEL;

notificationManager.notify(1, notification);
于 2012-05-21T12:18:27.753 に答える
3

それでも機能しない場合は、android:process=":remote"パーツを取り除くと役立つ場合があります。私のために働いた:)

于 2017-01-20T15:45:40.790 に答える
-1

また、上記に加えて、AlarmActivityのメソッドはLAUNCHERアクティビティのoncreateメソッドに含まれている必要があると思います。この場合、AlarmActivvityはアプリのLAUNCHERアクティビティである必要があります。これは私の問題を解決しました

于 2016-06-20T19:31:07.453 に答える
-1

でアラームを確立するためにアプリが1回実行されている限り、アプリが実行されてAlarmManagerいなくても、アラームはインテントを起動します。例外は、デバイスの再起動後です。デバイスの再起動時にアラームを開始するには、を実装しBroadcastReceiverてアラームを設定し、次のマニフェストにレシーバーを追加しますACTION_BOOT_COMPLETED

<receiver android:name=".SampleBootReceiver"
        android:enabled="false">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED"></action>
    </intent-filter>
</receiver>
于 2018-11-12T14:59:43.500 に答える