即使应用程序未运行,用户如何才能接收通知

时间:2013-08-28 10:13:49

标签: android database notifications

所以我正在尝试创建一个应用程序,以便当SQL数据库中的一行发生更改时,即使应用程序当前未运行,用户也会收到通知。我很确定这是可能的,因为Facebook可以在应用程序未运行时发送移动通知,但我不确定如何解决这个问题。

3 个答案:

答案 0 :(得分:2)

您需要使用在后台运行的Service。在服务中,您可以开始通知。目前尚不清楚你在谈论哪种“通知”?如果您在Google Cloud Messaging notification中谈论通知,那么您需要采用不同的方式。但是,那么你也会使用 GCMIntentService扩展Service类。

您想在when a row in a SQL database changes时发送通知。该行是否在服务器端发生变化?我假设是的,因为首先你在谈论Android数据库,然后你会提到SQLite而不是SQL。其次你举了Facebook的例子。因此,如果我的问题的答案是肯定的,那么使用GCM推送服务,您可以向用户发送推送消息。然后,当用户收到消息时,您可以显示包含正确数据的通知。在onReceive的{​​{1}}方法中,您将收到意图中的内容。在那里,您可以提取消息并创建通知。有关详情,请参阅here

答案 1 :(得分:2)

您需要注册内容观察员以获得有关更改的通知。

要使用ContentObserver,您必须采取两个步骤:

  • 实现ContentObserver的子类
  • 注册您的内容观察者以收听更改
  • 通知内容提供商的更改

-

class DbObserver extends ContentObserver {      
   public DbObserver(Handler handler) {
      super(handler);           
   }

   @Override
   public void onChange(boolean selfChange) {
      this.onChange(selfChange, null);
      // start the notification
   }        
}

注册您的内容观察者以收听更改:

getContentResolver().
      registerContentObserver(
            SOME_URI, 
            true, 
            yourObserver);

现在可以在更新数据库后调用notifyChange

notifyChange(Uri uri, ContentObserver observer)

使用内容观察者的一个简单示例是https://gist.github.com/JBirdVegas/3874450

答案 2 :(得分:1)

您可以在android

中使用Service

默认情况下,服务在主线程中与应用程序在同一进程中运行。

因此,您需要在服务中使用异步处理来在后台执行资源密集型任务。服务实现的常用模式是在服务中创建并运行新的Thread以在后台执行处理,然后在完成处理后终止服务。

每个服务都有一个特定的工作,即使您在不同的活动之间切换,也可以在不同的应用程序之间切换,它将持续运行。

要启动服务,请使用以下命令:

Intent i= new Intent(context, ServiceClass.class);
i.putExtra("KEY1", "Value to be used by the service");
context.startService(i); 

服务类的一个简单示例:

public class ServiceClass extends Service {
      @Override
      public int onStartCommand(Intent intent, int flags, int startId) {
        return Service.START_NOT_STICKY;
      }
      @Override
      public IBinder onBind(Intent intent) {
        return null;
      }
    }