Last active
April 6, 2024 12:00
-
-
Save vikrum/6170193 to your computer and use it in GitHub Desktop.
Firebase+Android sample app with background Service + local notifications.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?xml version="1.0" encoding="utf-8"?> | |
<manifest xmlns:android="http://schemas.android.com/apk/res/android" | |
package="com.example.bgfirebaseapp" | |
android:versionCode="1" | |
android:versionName="1.0" > | |
<uses-sdk | |
android:minSdkVersion="16" | |
android:targetSdkVersion="17" /> | |
<uses-permission android:name="android.permission.INTERNET" /> | |
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> | |
<application | |
android:allowBackup="true" | |
android:icon="@drawable/ic_launcher" | |
android:label="@string/app_name" | |
android:theme="@style/AppTheme" > | |
<activity | |
android:name="com.example.bgfirebaseapp.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> | |
<service | |
android:name=".FirebaseBackgroundService" | |
android:exported="false" | |
android:process=":remote" > | |
<intent-filter> | |
<action android:name="com.example.bgfirebaseapp.FirebaseBackgroundService" /> | |
</intent-filter> | |
</service> | |
<receiver android:name=".StartFirebaseAtBoot" > | |
<intent-filter> | |
<action android:name="android.intent.action.BOOT_COMPLETED" > | |
</action> | |
</intent-filter> | |
</receiver> | |
</application> | |
</manifest> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.bgfirebaseapp; | |
import android.app.Notification; | |
import android.app.NotificationManager; | |
import android.app.PendingIntent; | |
import android.app.Service; | |
import android.content.Context; | |
import android.content.Intent; | |
import android.os.IBinder; | |
import com.firebase.client.DataSnapshot; | |
import com.firebase.client.Firebase; | |
import com.firebase.client.ValueEventListener; | |
public class FirebaseBackgroundService extends Service { | |
private Firebase f = new Firebase("https://somedemo.firebaseio-demo.com/"); | |
private ValueEventListener handler; | |
@Override | |
public IBinder onBind(Intent arg0) { | |
return null; | |
} | |
@Override | |
public void onCreate() { | |
super.onCreate(); | |
handler = new ValueEventListener() { | |
@Override | |
public void onDataChange(DataSnapshot arg0) { | |
postNotif(arg0.getValue().toString()); | |
} | |
@Override | |
public void onCancelled() { | |
} | |
}; | |
f.addValueEventListener(handler); | |
} | |
private void postNotif(String notifString) { | |
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); | |
int icon = R.drawable.ic_launcher; | |
Notification notification = new Notification(icon, "Firebase" + Math.random(), System.currentTimeMillis()); | |
// notification.flags |= Notification.FLAG_AUTO_CANCEL; | |
Context context = getApplicationContext(); | |
CharSequence contentTitle = "Background" + Math.random(); | |
Intent notificationIntent = new Intent(context, MainActivity.class); | |
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0); | |
notification.setLatestEventInfo(context, contentTitle, notifString, contentIntent); | |
mNotificationManager.notify(1, notification); | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.bgfirebaseapp; | |
import android.app.Activity; | |
import android.content.Intent; | |
import android.os.Bundle; | |
import android.view.Menu; | |
public class MainActivity extends Activity { | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
// Start the background Firebase activity | |
startService(new Intent(FirebaseBackgroundService.class.getName())); | |
} | |
@Override | |
public boolean onCreateOptionsMenu(Menu menu) { | |
// Inflate the menu; this adds items to the action bar if it is present. | |
getMenuInflater().inflate(R.menu.main, menu); | |
return true; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.example.bgfirebaseapp; | |
import android.content.BroadcastReceiver; | |
import android.content.Context; | |
import android.content.Intent; | |
/** | |
* Start the service when the device boots. | |
* | |
* @author vikrum | |
* | |
*/ | |
public class StartFirebaseAtBoot extends BroadcastReceiver { | |
@Override | |
public void onReceive(Context context, Intent intent) { | |
context.startService(new Intent(FirebaseBackgroundService.class.getName())); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
You are calling the service once by receiver and once by main activity is there a chance the same service is started twice?