Skip to main content

Android - Notifications - 2

Start Services from Notification


widget.xml

 <?xml version="1.0" encoding="UTF-8"?>  
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
   android:layout_width="fill_parent"  
   android:layout_height="fill_parent"  
   android:gravity="center"  
   android:orientation="horizontal" >  
   <TextView  
     android:id="@+id/textView1"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:gravity="center"  
     android:text="DJ notification"  
     android:textAppearance="?android:attr/textAppearanceMedium" />  
   <Button  
     android:id="@+id/button1"  
     android:layout_width="wrap_content"  
     android:layout_height="wrap_content"  
     android:text="Start Service" />  
 </LinearLayout>  

Notification code:


 RemoteViews remoteViews = new RemoteViews(getPackageName(),  
                     R.layout.widget);  
           NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(  
                     this).setSmallIcon(R.drawable.ic_launcher).setContent(  
                     remoteViews);  
           // Creates an explicit intent for an Activity in your app  
           Intent resultIntent = new Intent(this, test.class);  
           Intent intent = new Intent(getApplicationContext(), TempServices.class);  
     PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, intent, 0);  
     Log.e("Pending Intent = ","" + pendingIntent.toString());  
           // The stack builder object will contain an artificial back stack for  
           // the  
           // started Activity.  
           // This ensures that navigating backward from the Activity leads out of  
           // your application to the Home screen.  
           TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);  
           // Adds the back stack for the Intent (but not the Intent itself)  
           stackBuilder.addParentStack(test.class);  
           // Adds the Intent that starts the Activity to the top of the stack  
           stackBuilder.addNextIntent(resultIntent);  
           PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,  
                     PendingIntent.FLAG_UPDATE_CURRENT);  
           remoteViews.setOnClickPendingIntent(R.id.textView1, resultPendingIntent);  
           remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent);  
           NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);  
           // mId allows you to update the notification later on.  
           mNotificationManager.notify(100, mBuilder.build());  

TempServices class (File Download):


 package com.example.uploadfile;  
 import android.app.NotificationManager;  
 import android.app.Service;  
 import android.content.Context;  
 import android.content.Intent;  
 import android.os.IBinder;  
 import android.support.v4.app.NotificationCompat;  
 import android.support.v4.app.NotificationCompat.Builder;  
 import android.util.Log;  
 public class TempServices extends Service {  
      protected static final int ID = 100;  
      private NotificationManager mNotifyManager;  
      private Builder mBuilder;  
      @Override  
      public IBinder onBind(Intent intent) {  
           // TODO Auto-generated method stub  
           return null;  
      }  
      @Override  
      public int onStartCommand(Intent intent, int flags, int startId) {  
           // TODO Auto-generated method stub  
           mNotifyManager = (NotificationManager) getApplicationContext()  
                     .getSystemService(Context.NOTIFICATION_SERVICE);  
           mBuilder = new NotificationCompat.Builder(this);  
           mBuilder.setContentTitle("Picture Download")  
                     .setContentText("Download in progress")  
                     .setSmallIcon(R.drawable.ic_launcher);  
           // Start a lengthy operation in a background thread  
           new Thread(new Runnable() {  
                @Override  
                public void run() {  
                     int incr;  
                     // Do the "lengthy" operation 20 times  
                     for (incr = 0; incr <= 100; incr += 5) {  
                          // Sets the progress indicator to a max value, the  
                          // current completion percentage, and "determinate"  
                          // state  
                          mBuilder.setProgress(100, incr, false);  
                          // Displays the progress bar for the first time.  
                          mNotifyManager.notify(0, mBuilder.build());  
                          // Sleeps the thread, simulating an operation  
                          // that takes time  
                          try {  
                               // Sleep for 5 seconds  
                               Thread.sleep(5 * 1000);  
                          } catch (InterruptedException e) {  
                               Log.e("error-->", "sleep failure");  
                          }  
                     }  
                     // When the loop is finished, updates the notification  
                     mBuilder.setContentText("Download complete")  
                     // Removes the progress bar  
                               .setProgress(0, 0, false);  
                     mNotifyManager.notify(ID, mBuilder.build());  
                }  
           }  
           // Starts the thread by calling the run() method in its Runnable  
           ).start();  
           return super.onStartCommand(intent, flags, startId);  
      }  
 }  

Comments

Popular posts from this blog

Don't Ship AI Agent Skills Without Evals

At the AI Engineer World's Fair on July 1, 2026, Philipp Schmid, a Staff Engineer on the Gemini API and agents team at Google DeepMind, asked a room full of engineers a simple question: who uses skills with their coding agents? Every hand went up. Who has evals for those skills? Almost none. That gap is the entire talk, which Schmid also wrote up on his own blog, philschmid.de/testing-skills . His team indexed the skills ecosystem through SkillsBench and found the same pattern everywhere: people ship a SKILL.md file after two manual test runs and move on. It looks fine in a demo. It quietly corrupts outputs in production, because bad skills don't crash. They just make the agent confidently wrong. If you've already read our breakdown of Matt Pocock's Claude Code skills library , think of this as the other half of that story: what happens once you've installed a skill and it's actually running against real prompts. Key Takeaways SkillsBench indexed 47,000+ un...

Connecting mysql Database in ANDROID using PHP & JSON

 To implement this tutorial you should have basic knowledge of how to run PHP script and start server.  If we talk about client-server architecture, client is Android device and in server side there is a combination of PHP Script and MySQL. In short, PHP Script sits in middle as shown in image. Lets suppose that we have a MySQL database named Employee, and a table int created, with the following SQL: CREATE TABLE `employee` (   `emp_id` int(11) NOT NULL auto_increment,   `emp_name` varchar(100) NOT NULL,   PRIMARY KEY  (`emp_id`) ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ; The PHP code will be very simple: Now Create Android Project :  The Android part is only a bit more complicated: -use a HttpPost to get the data -convert response to string -parse JSON data in to List In Your First Activity : O/P :

Android - Notifications - 3 (Applying a big view style to a notification)

Big picture style Bitmap icon1 = BitmapFactory.decodeResource(getResources(), R.drawable.dhaval1); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder( this).setAutoCancel(true) .setContentTitle("DJ-Android notification") .setSmallIcon(R.drawable.ic_launcher).setLargeIcon(icon1) .setContentText("Hello World!"); NotificationCompat.BigPictureStyle bigPicStyle = new NotificationCompat.BigPictureStyle(); bigPicStyle.bigPicture(icon1); bigPicStyle.setBigContentTitle("Dhaval Sodha Parmar"); mBuilder.setStyle(bigPicStyle); // Creates an explicit intent for an Activity in your app Intent resultIntent = new Intent(this, testActivity.class); // The stack builder object will contain an artificial ba...