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

Why Domain-Specific AI Agents Beat One Big Agent

Everyone is building agents right now. Real estate firms. Independent insurance brokers. Fortune 500 companies with budgets big enough to hire an army of consultants. Ask around and you'll hear the same story everywhere: "we're building our own agent." And yet almost nobody is asking the obvious question: why does the default approach keep failing? One large, general-purpose agent gets wired up to every tool the business owns. It impresses in the demo. Then it quietly stalls before production. There's a gap between what businesses want and what they're actually getting. They want AI woven into their data, their workflows, their day-to-day operations. What they get instead is one oversized agent trying to be a sales rep, a compliance officer, and a customer support line, all at once. That gap is an architecture problem, not a model problem. Key Takeaways The default "one big agent" pattern breaks down on context bloat, cost, fragility, and portability...

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...

ANDROID - update status Linked-IN

jars: 1. linkedin-j-android.jar 2. scribe-1.3.1.jar MainActivity: package com.testshare; import java.util.EnumSet; import org.scribe.oauth.OAuthService; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import com.google.code.linkedinapi.client.LinkedInApiClient; import com.google.code.linkedinapi.client.LinkedInApiClientFactory; import com.google.code.linkedinapi.client.enumeration.NetworkUpdateType; import com.google.code.linkedinapi.schema.Network; public class TestshareActivity extends Activity { private int LINKEDIN_OAUTH_RESULT_CODE = 4000; private OAuthService service; private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~"; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(...