【问题标题】:is it right way to set alarm at every 30 seconds ???每30秒设置一次警报是正确的方法吗???
【发布时间】:2017-02-11 20:39:43
【问题描述】:

我需要每 30 秒启动一次警报,我需要在不运行应用程序的情况下激活它。但是无论应用程序是否运行,AlarmReceiver 都不会被调用。有什么建议? start 方法在 MainActivity.java 类中

 public void start() {
    Calendar calendar=Calendar.getInstance();
    calendar.add(Calendar.SECOND, 30);
    Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
    PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
    alarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pintent);
    Log.d("alarm","alarm set for alarm receiver");
}

我的接收器文件

public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
   // Toast.makeText(context,"Alarm Receiver ",Toast.LENGTH_SHORT).show();
    Log.d("Alarm","Alarm receive");

}

}

清单文件:

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:supportsRtl="true"

    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity" android:configChanges="keyboardHidden|orientation|screenSize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <service android:name=".GetLocationService"/>
    <receiver android:name=".AlarmReceiver" android:enabled="true"/>
</application>

这里我可以设置闹钟,但我没有收到闹钟

【问题讨论】:

    标签: android


    【解决方案1】:

    在这个页面中有一个你需要的完整示例:

    https://www.thepolyglotdeveloper.com/2014/10/use-broadcast-receiver-background-services-android/

    显然你必须换行:

    PendingIntent pintent = PendingIntent.getService(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    

    到

    PendingIntent pintent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    

    将您的启动方法更改为:

    public void start() {
        Intent alarmIntent = new Intent(this, AlarmReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);
        AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        int interval = 30 * 1000; // 30 seconds of interval.
        manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);
        Toast.makeText(this, "Alarm Set", Toast.LENGTH_SHORT).show();
    }
    

    如果可行,请告诉我。

    【讨论】:

    • 收到这些警告消息 Unable to start service Intent { flg=0x4 cmp=com.example.bipin.getlocationdetails/.AlarmReceiver (has extras) } U=0: not found'
    【解决方案2】:

    我最近遇到了这个问题。问题出在我的自定义 Parcelable 对象上,使用原语效果很好。这个答案帮助了我:Sending Extras to onReceive only retrieves ALARM_COUNT

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多