【问题标题】:Get notification using AlarmManager setRepeating after every minute每分钟后使用 AlarmManager setRepeating 获取通知
【发布时间】:2014-06-14 15:12:16
【问题描述】:

我想创建一个应用程序,每隔一小时通知用户一次。为了做到这一点,我使用了 AlarmManager 并使用 setRepeating() 来重复警报,并且我提供了注册广播接收器的 Intent。

这很好用。我每小时都会收到通知。

在按钮点击事件上设置警报。

但是,一旦我从最近的活动列表中清除我的应用程序,我就不会收到通知。我再次打开应用程序并在那个时候重新创建了警报,它给了我通知。

即使我的应用程序已关闭,我应该怎么做才能收到通知。即使我的应用在后台没有任何活动运行。

是否可以使用AlarmManager。

这是我的代码:

活动类:

package com.example.positionexample;

import java.util.Calendar;

import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningServiceInfo;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
    Button bt;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt=(Button) findViewById(R.id.button1);
        bt.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Calendar cal = Calendar.getInstance();   
                //startService(new Intent(getApplicationContext(), MyService.class));
                Intent intent = new Intent(getApplicationContext(), MyBroadcastReceiver.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 234324243, intent, 0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
                alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pendingIntent);
            }
        });
    }
}

广播接收器类:

package com.example.positionexample;

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.util.Log;
import android.widget.Toast;

public class MyBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub

        generateNotification( context,  intent);
        Log.e("","Don't panik but your time is up!!!!.");
        Toast.makeText(context, "Don't panik but your time is up!!!!.",
                Toast.LENGTH_LONG).show();
    }
    public void generateNotification(Context context, Intent intent)
    {
        NotificationManager notifManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
        Notification note = new Notification(R.drawable.ic_launcher, "New E-mail", System.currentTimeMillis());

        PendingIntent bintent = PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0);

        note.setLatestEventInfo(context, "New E-mail", "You have one unread message.", bintent);

        notifManager.notify(123, note);
    }

}

Manfest 文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.positionexample"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="10" />  

<uses-permission android:name="android.permission.WAKE_LOCK" />


    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <!-- <service 
            android:enabled="true" 
            android:name="com.example.positionexample.MyService" 

            /> -->

        <activity
            android:name="com.example.positionexample.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
         <receiver android:name="MyBroadcastReceiver" >
        </receiver>
    </application>

</manifest>

【问题讨论】:

  • 您找到解决问题的方法了吗?我也有同样的问题。它只会在我打开我的应用程序时通知。

标签: android android-alarms


【解决方案1】:

但是,一旦我从最近的活动列表中清除我的应用程序,我就没有收到通知

这应该只发生在制造商绑定刷掉最近任务以执行通常仅在用户在设置中为您的应用按下“强制停止”时才会发生的设备上。除其他外,“强制停止”会删除您预定的警报事件。

您可以使用 adb shell dumpsys alarm 查看您的闹钟是否仍在安排中。

即使我的应用已关闭,我应该怎么做才能收到通知

如果用户强制停止您的应用,您的应用将永远不会再次运行,直到用户手动启动您的一项活动。

通常,从最近的任务列表中滑出只会停止您当前的进程,而不会理会您的警报。

Dave Smith 向 a good blog post 发送了关于“关闭”应用的不同方式的影响。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多