Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只要应用程序在Android中打开,就会发送通知_Android_Notifications_Alarmmanager - Fatal编程技术网

只要应用程序在Android中打开,就会发送通知

只要应用程序在Android中打开,就会发送通知,android,notifications,alarmmanager,Android,Notifications,Alarmmanager,我有一个应用程序,它每天在一个准确的时间用AlarmManager发送一个通知 但是它有一个bug只要应用程序打开,就会发送通知 我怎样才能得到每天发送一次的通知?多谢各位 main活动 public class MainActivity extends Activity { private PendingIntent pendingIntent; @Override public void onCreate(Bundle savedInstanceState) { super.o

我有一个应用程序,它每天在一个准确的时间用AlarmManager发送一个通知

但是它有一个bug只要应用程序打开,就会发送通知

我怎样才能得到每天发送一次的通知?多谢各位

main活动

public class MainActivity extends Activity {

private PendingIntent pendingIntent;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Calendar calendar = Calendar.getInstance();

    int d = Integer.valueOf(1440);
    calendar.setTimeInMillis(System.currentTimeMillis());

    Intent i = new Intent(MainActivity.this, Receiver.class);
    pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, i, 0);

    AlarmManager alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * d, pendingIntent);
}
}
接收器

public class Receiver extends BroadcastReceiver {

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

    NotificationManager notificationManager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
    Intent i = new Intent(context, MainActivity.class);

    Notification notification = new Notification(R.drawable.ic_launcher,"This is a test message!", System.currentTimeMillis());

    long[] vibrate = {100, 100, 200, 300};
    notification.vibrate = vibrate;
    notification.defaults = Notification.DEFAULT_ALL;

    i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP);

    PendingIntent pendingNotificationIntent = PendingIntent.getActivity(context, 0, i,PendingIntent.FLAG_UPDATE_CURRENT);
    notification.flags |= Notification.FLAG_AUTO_CANCEL;
    notification.setLatestEventInfo(context, "AlarmManagerDemo", "This is a test message!", pendingNotificationIntent);

    notificationManager.notify(0, notification);
}
}
每隔int dmin调用CallThisClass.class的代码

停止调用CallThisClass.class的代码

调用thisClass.class

不要忘记AndroidManifest.xml中的接收器


和许可


您可以随时开始调用CallThisClass.class。点击一个按钮,或者当你的主要活动开始时。当你不想上课的时候,一定要停止给他们打电话。例如,当用户第一次安装你的应用程序时,你希望每24小时都会有更新(通知或其他),rit?在您的首选项中存储一个变量,该变量只有在第一次加载时才会自行更改。每次用户进入应用程序时检查该变量。如果是第一次,请启动调用代码。(现在我们还不想调用停止代码,因为即使应用程序关闭,我们也无法继续调用该类!)关闭应用程序,它就会工作。您可以在设置中有一个按钮或用于测试的东西,当单击该按钮时,将运行不调用该类的代码。在您的情况下,它将每隔d分钟(即24小时)停止调用类(您也可以在点击此按钮时将prefrnce更改为默认值,以便下次启动活动或再次单击activate或其他按钮时,开始调用该类的代码将启动)。我希望有帮助

另外,我建议你读一读


比较你的两次。当您打开应用程序时,请将该时间和您的固定时间进行比较。如果等于,则发送通知。@PiyushGupta我希望通知自动发送,但不打开此应用程序。这是你的解决方案吗?但在此之前,你必须检查你的应用程序是否在前台。您的代码位于onCreate()方法中,每当您打开应用程序或返回此活动时,都会调用您的接收器。@PiyushGupta您能帮我在响应中放置正确的代码吗?此代码位于主函数的onCreate中吗?每d分钟重复一次?我已经用你的代码编辑了我的代码。但我也有同样的问题。通知总是发送的
Intent myIntent = new Intent(getActivity(), CallThisClass.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0);
AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
Calendar calendar = Calendar.getInstance();
int d = Integer.valueOf(duration);
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 2);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * d, pendingIntent);
Intent myIntent = new Intent(getActivity(), CallThisClass.class);
PendingIntent  pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0);
alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
public class CallThisClass extends BroadcastReceiver {
    @Override
    public void onReceive(final Context context, Intent intent) {
        Log.i("Received", "Broadcast Received !");
        // Do your stuff
    }
}
<receiver android:name=".CallThisClass" />
<uses-permission android:name="com.android.alarm.permission.SET_ALARM" />