java - 广播接收器通知链接到我的应用程序

标签 java android service background delay

我正在尝试创建一个服务,该服务每 x 分钟检查一次服务器上的新消息。

我很高兴找到这篇文章:Alarm Manager Example

主要 Activity

package com.example.alarmexample;  

import android.app.Activity;  
import android.app.AlarmManager;  
import android.app.PendingIntent;  
import android.content.Intent;  
import android.os.Bundle;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.widget.Button;  
import android.widget.EditText;  
import android.widget.Toast;  

public class MainActivity extends Activity {  
Button b1;  

    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main); 

        startAlert();  

}   public void startAlert() { 
        int timeInSec = 2;

        Intent intent = new Intent(this, MyBroadcastReceiver.class);  
        PendingIntent pendingIntent = PendingIntent.getBroadcast(  
                                      this.getApplicationContext(), 234, intent, 0);  
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);  
        alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (timeInSec * 1000), pendingIntent);  
        Toast.makeText(this, "Alarm set to after " + i + " seconds",Toast.LENGTH_LONG).show();  
    }  

}

MyBroadcastReceiver.java

import android.content.BroadcastReceiver;  
import android.content.Context;  
import android.content.Intent;  
import android.media.MediaPlayer;  
import android.widget.Toast;  

public class MyBroadcastReceiver extends BroadcastReceiver {  
    MediaPlayer mp;  
    @Override  
    public void onReceive(Context context, Intent intent) {  
        mp=MediaPlayer.create(context, R.raw.alarm);  
        mp.start();  
        Toast.makeText(context, "Alarm", Toast.LENGTH_LONG).show();  
    }  
}  

AndroidManifest.xml

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

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


    <application  
        android:allowBackup="true"  
        android:icon="@drawable/ic_launcher"  
        android:label="@string/app_name"  
        android:theme="@style/AppTheme" >  

        <activity  
            android:name="com.example.alarmexample.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>  

这正是我想要的。但是,如果我尝试使用 BroadcastReceiver 类中的上下文来通知用户。当用户单击通知时,应用程序不会启动。

我需要做一些特殊的事情来存档这个吗?

最佳答案

这不是对您的问题的直接回答(因为没有足够的声誉,所以无法发表评论),但是您真的需要每 x 分钟检查一次服务器的事件吗?我对你的项目一无所知,但 firebase https://firebase.google.com/docs/cloud-messaging/可能是一个不错的选择。它允许您向客户端发送推送通知,这样客户端就不需要不断轮询。

关于java - 广播接收器通知链接到我的应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58276240/

相关文章:

grails - 如何从 gsp 调用 Grails 服务?

java - 设计用于函数调用的 REST api

java - 从github导入maven项目到Intellij IDEA

android - 如何检查协程是否使用相同的上下文?

android - 使用复选框将 TextView 值发送到另一个 Activity 使用图像按钮 onclick

android - 在 Android 中为同一个应用程序创建第二个 zygote 进程

javascript - 使用 Onclick 将参数从一个 jsp 页面传递到另一个 jsp 页面

java - 在启动 Ubuntu 时运行程序

web-services - 为什么常见的 Web 服务客户端使用代理

asp.net - XML 解析错误 : no element found