在现有使用广播接收器的应用程序之后,有没有办法让重复警报工作?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在现有使用广播接收器的应用程序之后,有没有办法让重复警报工作?相关的知识,希望对你有一定的参考价值。

我是android新手。我正在尝试创建一个使用BroadcastReceiver来执行由重复警报触发的主要活动的函数的应用程序。我读到我必须动态注册我所做的broadcastReceiver - 这是为了能够在主要活动上执行该功能。我面临的问题是,一旦应用程序退出,alarm就会停止工作。我读到这是设计 - 有没有办法克服这个问题,还是我必须使用service?提前致谢。

示例代码:

public class AlarmReceiver extends BroadcastReceiver {  
    @Override  
    public void onReceive(Context context, Intent intent) {  
        Toast.makeText(context, "from AlarmReceiver", Toast.LENGTH_SHORT).show();  
    }
}

public class MainActivity extends AppCompatActivity {  
    private PendingIntent pendingIntent;  
    private AlarmManager manager;  
    private AlarmReceiver myReceiver = null;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        myReceiver = new AlarmReceiver();  
        IntentFilter myIntentFilter = new IntentFilter("ANY_ACTION");  
        registerReceiver(myReceiver,  myIntentFilter);  
        Intent myIntent = new Intent();  
        myIntent.setAction("ANY_ACTION");  
        pendingIntent = PendingIntent.getBroadcast(this, 0,myIntent,0);  
    }  
      public void startAlarm(View view) {  
        manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);  
        int interval = 1500;  
        manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),   interval, pendingIntent);  
        Toast.makeText(this, "Alarm Set", Toast.LENGTH_LONG).show();  
    }     
}
答案

我想,当你的应用程序没有运行时你的闹钟停止工作的原因是你在本地使用registerReceiver注册你的AlarmReceiver。如果你想注册你的AlarmReceiver,即使你的应用程序没有运行它也能继续工作,你需要在AndroidManifest.xml中注册它。

首先,将您的接收器添加到qazxsw poi中,如下所示:

AndroidManifest.xml

并设置这样的闹钟(记住:不要设置闹钟间隔太短,设置至少1分钟;你在你的代码中设置你的间隔1.5秒 - 它可能不起作用):

  <application>    
       //...
       <receiver android:name=".AlarmReceiver">
        </receiver>
       //...
  </application>

在onReceive中触发警报时,只需执行您想要执行的操作:

    int interval = 60 * 1000;
    Intent intent=new Intent(this, AlarmReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1, intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);

以上是关于在现有使用广播接收器的应用程序之后,有没有办法让重复警报工作?的主要内容,如果未能解决你的问题,请参考以下文章

广播 Broadcast Receiver

Android学习之基础知识八—Android广播机制

如何在没有权限的android 6中使用广播接收器启动应用程序

有没有办法在使用一些“帮助应用程序”安装后立即启动应用程序? [复制]

sendStickyBroadcast工作方式

android 广播分类