Android报警管理器,广播接收器注册在代码中而不是清单中

Android报警管理器,广播接收器注册在代码中而不是清单中,android,broadcastreceiver,alarmmanager,Android,Broadcastreceiver,Alarmmanager,我想用一个闹钟在某个时间运行一些代码。我已经成功地用清单中注册的广播接收器实现了一个警报,但据我所知,这个方法为广播接收器使用了一个单独的类 我可以使用此方法启动另一个活动,但我不能使用它在我的主活动中运行方法 () 因此,我一直在尝试在我的主要活动中注册我的广播接收器,如上面的回答所述 private BroadcastReceiver receiver = new BroadcastReceiver(){ @Override public void onReceive(Con

我想用一个闹钟在某个时间运行一些代码。我已经成功地用清单中注册的广播接收器实现了一个警报,但据我所知,这个方法为广播接收器使用了一个单独的类

我可以使用此方法启动另一个活动,但我不能使用它在我的主活动中运行方法

()

因此,我一直在尝试在我的主要活动中注册我的广播接收器,如上面的回答所述

private BroadcastReceiver receiver = new BroadcastReceiver(){
    @Override
    public void onReceive(Context context, Intent intent) {
        Toast.makeText(context, "hello", Toast.LENGTH_SHORT).show();
        uploadDB();         
    }
};    

public void onResume() {
    super.onResume();

    IntentFilter filter = new IntentFilter();
    filter.addAction(null);

    this.registerReceiver(this.receiver, filter);
}

public void onPause() {
    super.onPause();

    this.unregisterReceiver(this.receiver);
}
但是,我无法将其与alarm manager一起使用,我不确定如何将报警意图链接到广播接收器。有人能给我举一个在活动中动态注册alarm manager广播接收器的例子吗?或者解释一下我该怎么做?

这个怎么样

Intent startIntent = new Intent("WhatEverYouWant");
PendingIntent startPIntent = PendingIntent.getBroadcast(context, 0, startIntent, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm.set(AlarmManager.RTC_WAKEUP, triggerTime, startPIntent);
然后在
Manifest.xml
文件中:

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


据我所知,你仍然需要在舱单上声明接收人。我不确定是否可以将其设置为活动内部的私有实例。您可以在活动内部声明onReceive并调用它(如果BroadcastReceiver有接口,我不知道它是否有接口)。

从要启动报警的位置启动报警意图。从您想要开始监听警报的位置编写以下代码

Intent myIntent = new Intent(getBaseContext(), **AlarmReceiver**.class);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
                AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(System.currentTimeMillis());
                calendar.add(Calendar.MINUTE, shpref.getInt("timeoutint", 30));
                alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
在广播接收器中,写下你想要接收的代码。在梅尼费斯特写下

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

你也可以把重复报警也。
希望能有帮助

太棒了,我成功地让它工作了,不过我不需要在清单中添加代码。刚刚用一个同名的intentfilter程序注册了广播接收器。@serenskye如果不在清单中注册,我的代码将无法工作。你是怎么逃脱的?