为通知创建永无止境的后台服务

时间:2017-02-14 04:44:02

标签: android firebase firebase-realtime-database background-service

我必须创建一个Android应用程序,即使应用程序不工作,也会在收到新消息时发出通知。我正在使用firebase数据库。我编写了firebase数据快照的代码,但它只在应用程序正常工作时才能运行我需要运行此代码,如果应用程序不能正常工作。

        Mref=new Firebase("https://iyutue-30s49.firebaseio.com/");
    Mref.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {

            String value=dataSnapshot.getValue(String.class);
            myDb.GetAllData();
            String idd= String.valueOf(myDb.id);
            if (value.equals(idd)==true){
                NotificationCompat.Builder builder=new NotificationCompat.Builder(getApplicationContext());
                builder.setSmallIcon(R.drawable.ic_tab_profile);
                builder.setContentTitle("plaese").setContentText("jijo");
                Intent intent =new Intent(getApplicationContext(),MainActivity.class);
                TaskStackBuilder stackBuilder=TaskStackBuilder.create(getApplicationContext());
                stackBuilder.addParentStack(MainActivity.this);
                stackBuilder.addNextIntent(intent);
                PendingIntent pendingIntent=stackBuilder.getPendingIntent(0,PendingIntent.FLAG_UPDATE_CURRENT);
                builder.setContentIntent(pendingIntent);
                NotificationManager NM=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
                NM.notify(0,builder.build());
            }
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

        }
    });

我需要在应用程序不工作时在后台执行此代码也请帮助我在advnace

1 个答案:

答案 0 :(得分:1)

这段代码需要包装在要执行的Android组件中。这实际上取决于你的触发器是什么。如果您想在后台执行此操作,那么使用 _recorder.Reset(); _recorder.SetAudioSource(AudioSource.Mic); _recorder.SetOutputFormat(OutputFormat.Mpeg4); _recorder.SetAudioEncoder(AudioEncoder.HeAac); _recorder.SetAudioChannels(1); _recorder.SetAudioSamplingRate(44100); _recorder.SetAudioEncodingBitRate(96000); _recorder.SetOutputFile(MediaPath.tempDir + Java.IO.File.Separator + File_Name); service是您最好的选择。 正如我所提到的,它实际上取决于触发器。

对于一个例如,让我们说,你有一个应用程序需要在检测到新的短信时显示祝酒词。在这种情况下,您需要注册广播,系统会在SMS到达时调用广播接收器。在接收器中,您可以放置​​自己的逻辑(如展示吐司)。