skip to main | skip to sidebar

Android Development Tutorial

Pages

  • Home
 
  • RSS
  • Twitter
Related Posts Plugin for WordPress, Blogger...
Friday, October 26, 2012

Reordering of listview

Posted by Raju Gupta at 3:46 AM – 0 comments
 

Listview rows order can be changed using drag and drop functionality.Dragging should be enabled beyond the visible listview position.



<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent" android:layout_height="wrap_content">
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/icon" android:id="@+id/entryIcon"></ImageView>
<TextView android:layout_height="wrap_content" android:id="@+id/TextView01" android:layout_width="wrap_content" android:layout_centerVertical="true" android:text="Demo description" android:layout_toRightOf="@+id/entryIcon"></TextView>
</RelativeLayout>




<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout android:id="@+id/mainAbsoluteLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android">


<com.myself.dragndrop.CustomListView
 android:id="@+id/android:list"
 android:layout_width="fill_parent"
    android:layout_height="fill_parent"
>
</com.myself.dragndrop.CustomListView>

</AbsoluteLayout>

//CustomListView.java:

import java.util.ArrayList;

import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.widget.AbsListView;
import android.widget.AbsoluteLayout;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.AbsListView.LayoutParams;

public class CustomListView extends ListView {
 
 public View moveView = null;
 private Context context = null;
 public int movedPosition = 0;
 public Entry moveEntry = null;
 
 public boolean isMoveFlag = false;
 private int firstPosition;
 private int lasPosition;
 private ArrayList<com.myself.dragndrop.CustomListView.Coordinates> listCoordinates;
 
 public CustomListView(Context context) {
  super(context);
  // TODO Auto-generated constructor stub
  this.context = context;
  setVerticalScrollBarEnabled(false);

 }

 public CustomListView(Context context, AttributeSet attrs) {
  super(context, attrs);
  // TODO Auto-generated constructor stub
  this.context = context;
  setVerticalScrollBarEnabled(true);

 }
 
 

 
 @Override
 public boolean onTouchEvent(MotionEvent ev) {
  // TODO Auto-generated method stub
  if (isMoveFlag) {
   switch (ev.getAction()) {
   case MotionEvent.ACTION_DOWN:
    Log.v(getClass().toString(),"action_dowm");
    int y = (int)ev.getY();
    if (getParent() instanceof AbsoluteLayout) {
     AbsoluteLayout parent = (AbsoluteLayout)getParent();
     if (moveView != null) {
      parent.removeView(DnDAdapter.emptyView);
      parent.addView(DnDAdapter.emptyView, new AbsoluteLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 0, y - 22));
      
     }
    }
    break;
   case MotionEvent.ACTION_MOVE:
    Log.v(getClass().toString(),"action_move");
    int yMove = (int)ev.getY();
    if (getParent() instanceof AbsoluteLayout) {
     AbsoluteLayout parent = (AbsoluteLayout)getParent();
     if (moveView != null) {
      parent.removeView(DnDAdapter.emptyView);
      parent.addView(DnDAdapter.emptyView, new AbsoluteLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT, 0, yMove - 22));
      inChild(MotionEvent.ACTION_MOVE);
     }
    }
    break;
   case MotionEvent.ACTION_UP: 
    if (getParent() instanceof AbsoluteLayout) {
     AbsoluteLayout parent = (AbsoluteLayout)getParent();
     if (moveView != null) {
      parent.removeView(DnDAdapter.emptyView);
      inChild(MotionEvent.ACTION_UP);
//      DnDAdapter.addEntry(movedPosition);
     }
    }
    isMoveFlag = false;
    setEnabled(true);
    Log.v(getClass().toString(),"action_up: " + isMoveFlag);
    break;
   default:
    break;
  }
  }
  return super.onTouchEvent(ev);
 }
 
 @Override
 public void setOnScrollListener(OnScrollListener l) {
  // TODO Auto-generated method stub
  l = new OnScrollListener() {
   
   @Override
   public void onScrollStateChanged(AbsListView view, int scrollState) {
    // TODO Auto-generated method stub
     firstPosition = getFirstVisiblePosition();
     lasPosition = getLastVisiblePosition();
   }
   
   @Override
   public void onScroll(AbsListView view, int firstVisibleItem,
     int visibleItemCount, int totalItemCount) {
    // TODO Auto-generated method stub
    
   }
  };
  super.setOnScrollListener(l);
 }
 
 private void inChild(int action) {
  setCoordinates();
  for (int i = 0; i < listCoordinates.size(); i++) {
   System.err.println("size"+listCoordinates.size());
   Coordinates coordinates = listCoordinates.get(i);
   int topPosition = coordinates.getTop();
   System.err.println("coordinates.getTop()"+coordinates.getTop());
   System.err.println("coordinates.getBottom()"+coordinates.getBottom());
   int bottomPosition = coordinates.getBottom();
   int bottomMoveViewPosition = DnDAdapter.emptyView.getBottom();
   if (i != 0) {
    if (bottomMoveViewPosition > topPosition && bottomMoveViewPosition < bottomPosition) {
     Log.v(getClass().toString(),"Move view in position: " + i);
     DnDAdapter.removeEmptyEntry();
     DnDAdapter.addEmptyEntry(getFirstVisiblePosition() + i);
     if (action == MotionEvent.ACTION_UP) {
      DnDAdapter.removeEmptyEntry();
      DnDAdapter.addEntry(getFirstVisiblePosition() + i);
     }
    }
   }
  }
 }
 
 private void setCoordinates() {
  listCoordinates = new ArrayList<Coordinates>();
  int count = getChildCount();
  System.err.println("count"+count);
  for (int i = 0; i < count; i++) {
   View child = getChildAt(i);
   if (child != null) {
    Coordinates coord = new Coordinates();
    coord.setTop(child.getTop());
    coord.setBottom(child.getBottom());
    listCoordinates.add(coord);
   }
  }
 }
 
 
 
 class Coordinates {
  
  private int top = 0;
  private int bottom = 0;
  
  public int getTop() {
   return top;
  }
  public void setTop(int top) {
   this.top = top;
  }
  public int getBottom() {
   return bottom;
  }
  public void setBottom(int bottom) {
   this.bottom = bottom;
  }
  
  
 }

}


//ReorderAdapter.java:

import java.util.ArrayList;
import java.util.List;

import com.myself.dragndrop.R;

import android.content.Context;
import android.graphics.Color;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnTouchListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class ReorderAdapter extends BaseAdapter {
 
 private static List<Entry> items = null;
 private Context context = null;
 
 public static View emptyView = null;
 
 private static Entry emptyEntry = new Entry();
 
 public ReorderAdapter(Context context) {
  // TODO Auto-generated constructor stub
  this.context = context;
//  buildList();
 }
 
 
 
 public List<Entry> getItems() {
  return items;
 }
 
 public void setList(List<Entry> items) {
  this.items = items;
 }

 @Override
 public int getCount() {
  // TODO Auto-generated method stub
  System.err.println("items.size()"+items.size());
  return items.size();
 }

 @Override
 public Object getItem(int position) {
  // TODO Auto-generated method stub
  return items.get(position);
 }

 @Override
 public long getItemId(int position) {
  // TODO Auto-generated method stub
  return 0;
 }

 @Override
 public View getView(final int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub
  Entry entry = items.get(position);
  System.err.println("getview"+position);
  
  LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  final View view = inflater.inflate(R.layout.listitem, parent, false);
  TextView txt = (TextView)view.findViewById(R.id.TextView01);
  txt.setText(entry.getName());
  txt.setTextColor(Color.WHITE);
  final ImageView img = (ImageView)view.findViewById(R.id.entryIcon);
  img.setOnTouchListener(new OnTouchListener() {
   
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    Log.v(getClass().toString(),"Icon onTouch. Selected position: " + position);
    
    DragAndDrop.listView.moveEntry = items.get(position);
    buildEmptyView(DragAndDrop.listView.moveEntry);
    items.remove(position);
    items.add(position, emptyEntry);
    DragAndDrop.listView.invalidateViews();
    DragAndDrop.listView.setEnabled(false);
    DragAndDrop.listView.isMoveFlag = true;
    DragAndDrop.listView.moveView = view;
    DragAndDrop.listView.movedPosition = position;
    return false;
   }
  });
  if (entry.getName().equals("Empty entry")) {
   img.setVisibility(View.INVISIBLE);
   txt.setVisibility(View.INVISIBLE);
  }
  return view;
 }

 private void buildEmptyView(Entry moveentry) {
  LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
  emptyView = inflater.inflate(R.layout.emptyview, null, false);
  TextView txt = (TextView)emptyView.findViewById(R.id.TextView01);
  txt.setText(moveentry.getName());
  txt.setTextColor(Color.WHITE);
 }
 
 public static void addEntry(int pos) {
  items.add(pos, DragAndDrop.listView.moveEntry);
  DragAndDrop.listView.invalidateViews();
 }
 
 public static void addEmptyEntry(int pos) {
  items.add(pos, emptyEntry);
  DragAndDrop.listView.invalidateViews();
 }
 
 public static void removeEmptyEntry() {
  items.remove(emptyEntry);
  DragAndDrop.listView.invalidateViews();
 }
}

//DragAndDrop.java :

import java.util.ArrayList;
import java.util.List;


import android.app.Activity;
import android.app.ListActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;


public class DragAndDrop extends ListActivity {
    /** Called when the activity is first created. */
 
 
 public static LinearLayout layout = null;
 public static ScrollView scrollView = null;
 public static CustomListView listView = null; 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ReorderAdapter adapter = new ReorderAdapter(this);
        adapter.setList(buildList());
        listView = (CustomListView)getListView();
        listView.setAdapter(adapter);
        
    }
    
    private List<Entry> buildList() {
  List<Entry> items = new ArrayList<Entry>();
  for (int i = 0; i < 30; i++) {
   Entry entry = new Entry();
   entry.setName("Demo entry " + i);
   items.add(entry);
  }
  return items;
 }
    
    
}
[ Read More ]
Read more...
Thursday, October 25, 2012

Text-to-Speech capability for Android Devices

Posted by Raju Gupta at 3:34 AM – 0 comments
 

This code snippet described the Text-to-Speech (TTS) capability. Also known as "speech synthesis" for Android Devices. TTS enables Android device to "speak" text of different languages. Mostly all Android-powered devices that are supporting the TTS functionality comes with the TTS engine integrated. But some devices lacks it. There is an API available which checks the TTS engine and install it on device if it is not there.


 import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.speech.tts.TextToSpeech.OnInitListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class TextToSpeechActivity extends Activity implements OnInitListener {
 
 private int CURRENT_DATA_CHECK_CODE = 0;
 
  // Instance of TextToSpeech 
                     private TextToSpeech oTTS;
 
 // Object for the Editable Text Input
                     private EditText inputTextControl;
                     // Object for the button
 private Button speakButtonControl;
    
 @Override
    public void onCreate(Bundle savedInstanceState) {
  
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        inputTextControl = (EditText) findViewById(R.id.input_text);
        speakButtonControl = (Button) findViewById(R.id.speak_button);
        
        speakButtonControl.setOnClickListener(new OnClickListener() {   
   @Override
   public void onClick(View v) {
    String strText = inputTextControl.getText().toString();
    if (strText!=null && strText.length()>0) {
     Toast.makeText(TtsActivity.this, "Testing: " + strText, Toast.LENGTH_LONG).show();
     oTTS.speak(strText, TextToSpeech.QUEUE_ADD, null);
    }
   }
  });
        
        Intent checkIntent = new Intent();
  newIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
  // startActivityForResult will wait till the current intent will not be interpreted
                                           startActivityForResult(newIntent, CURRENT_DATA_CHECK_CODE);
  
    }
 
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == CURRENT_DATA_CHECK_CODE) {
   if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
    // on successful call create the TTS instance
    oTTS = new TextToSpeech(this, this);
   } 
   else {
    // data may be missing so install it
    Intent installIntent = new Intent();
    installIntent.setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
    startActivity(installIntent);
   }
  }

 }

 @Override
 public void onInit(int status) {  
  if (status == TextToSpeech.SUCCESS) {
   Toast.makeText(TtsActivity.this, 
     "Text-To-Speech engine has been initialized", Toast.LENGTH_LONG).show();
  }
  else if (status == TextToSpeech.ERROR) {
   Toast.makeText(TtsActivity.this, 
     "Error occurred initializing Text-To-Speech engine", Toast.LENGTH_LONG).show();
  }
 }
 
}

[ Read More ]
Read more...
Wednesday, October 24, 2012

Android Stub uninstalling the existing client and launching another client

Posted by Raju Gupta at 3:30 AM – 0 comments
 

This Android Application uninstall prior version of client from the device. It checks for the newer version of client on the device and launch it. There is usage of onActivityResult method which shows how to wait till previous Intent is getting completed (returning its result).



import android.app.Activity;
import android.os.Bundle;
import android.net.Uri;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;

public class PreCachingIssueApp extends Activity
{
   private final static int    UNINSTALL_REQUEST_CODE = 0;

   private final static String m_sPackageToUninstall  = "com.test"; //old client to be uninstall

//client installed from market place
   private final static String m_sPackageToLaunch     = "com.google.android.CalculatorCheck";
   private final static String m_sClassToLaunch       = "com.google.android.CalculatorCheck.Calculator";

//wap url to be opened - just an example set google.com   
private final static String m_sWebUrl              = "http://google.com";

   public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      // Check for the previous Client and uninstall it
      try
      {
         // Check if the package exist or not
         PackageManager oPackageManager = getPackageManager();
         PackageInfo oPackageInfo = oPackageManager.getPackageInfo(m_sPackageToUninstall, PackageManager.GET_ACTIVITIES);
         if (oPackageInfo != null)
         {
            Uri oPackageUri = Uri.parse("package:" + m_sPackageToUninstall);
            Intent oIntent = new Intent(Intent.ACTION_DELETE, oPackageUri);
            // wait till the uninstall is not completed
           startActivityForResult(oIntent, UNINSTALL_REQUEST_CODE);
         }
         else
         {
            launchApp();
         }
      }
      catch (NameNotFoundException e)
      {
         launchApp();
      }
   }

   private void launchApp()
   {
      // Launch the new client from another vendor if it is installed on the device else launch the WAP Mobile TV url
      try
      {
         // Check if the package exist or not
         PackageManager oPackageManager = getPackageManager();
         PackageInfo oPackageInfo = oPackageManager.getPackageInfo(m_sPackageToLaunch, PackageManager.GET_ACTIVITIES);
         if (oPackageInfo != null)
         {
            Intent oNewClientIntent = new Intent(Intent.ACTION_MAIN);
            oNewClientIntent.setComponent(new ComponentName(m_sPackageToLaunch, m_sClassToLaunch));
            // launch the new client
            startActivity(oNewClientIntent);
         }
         else
         {
            Intent oIntent = new Intent(Intent.ACTION_VIEW);
            oIntent.setData(Uri.parse(m_sWebUrl));
            // launch the web url
            startActivity(oIntent);
         }
      }
      catch (NameNotFoundException e)
      {
         Intent oIntent = new Intent(Intent.ACTION_VIEW);
         oIntent.setData(Uri.parse(m_sWebUrl));
         startActivity(oIntent);
      }

     // make sure this stub application will kill itself once user will exit from the application launched by     
     // the stub 
     super.onDestroy();
      finish();
   }

   protected void onActivityResult(int nRequestCode, int nResultCode, Intent oIntent)
   {
      super.onActivityResult(nRequestCode, nResultCode, oIntent);

      if (nRequestCode == UNINSTALL_REQUEST_CODE)
      {
         launchApp();
      }
   }
}

[ Read More ]
Read more...
Tuesday, October 23, 2012

Tab creation in android screen

Posted by Raju Gupta at 3:26 AM – 0 comments
 

Creation of tab using xml   




      
            
            
      
 

[ Read More ]
Read more...
Monday, October 22, 2012

ListView Recordering by drag drop in Android

Posted by Raju Gupta at 3:17 AM – 0 comments
 

It is used to reorder the list items by just draggin and dropping them to the desired posotion.


// Initialize your list view in layout file as follows:
<com.tcs.view.DragDropListView
 android:layout_width="fill_parent" android:clickable="false"
 android:id="@android:id/list" android:layout_height="fill_parent"
 android:drawingCacheQuality="high" android:layout_above="@+id/linearLayout2above">
</com.tcs.view.DragDropListView>

//Import the attached java file in your package.

// Set the listener on your LIst View Object with the following code
Where "view" is the list view object in below line.
 ((DragDropListView) view).setDropListener(mDropListener);

// Initialize the listener as folows.
// Here variable from tells you item's initial position and to tells you the final position. wrtie your own waht you want to do with List you have passed as an adpater. 
 /**
     * Drop Listener it will listen to from and to position of drop event when
     * the user will drop the selected item at the desired event.
     */
    private DragDropListView.DropListener mDropListener = new DragDropListView.DropListener() {
        public void drop(int from, int to) {
           
        }
    };



You need to cutomize the layout item in attached file as per your requirement.

[ Read More ]
Read more...
Sunday, October 21, 2012

Android app for SimpleWiktionary

Posted by Raju Gupta at 3:11 AM – 0 comments
 
This App takes the word and gives its meaning in detail. Also displays the word of the day
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;
import android.util.Log;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

/**
 * Helper methods to simplify talking with and parsing responses from a
 * lightweight Wiktionary API. Before making any requests, you should call
 * {@link #prepareUserAgent(Context)} to generate a User-Agent string based on
 * your application package name and version.
 */
public class SimpleWikiHelper {
 private static final String TAG = "SimpleWikiHelper";

 /**
  * Regular expression that splits "Word of the day" entry into word
  * name, word type, and the first description bullet point.
  */
 public static final String WORD_OF_DAY_REGEX =
   "(?s)\\{\\{wotd\\|(.+?)\\|(.+?)\\|([^#\\|]+).*?\\}\\}";

 /**
  * Partial URL to use when requesting the detailed entry for a specific
  * Wiktionary page. Use {@link String#format(String, Object...)} to insert
  * the desired page title after escaping it as needed.
  */
 private static final String WIKTIONARY_PAGE =
   "http://en.wiktionary.org/w/api.php?action=query&prop=revisions&titles=%s&" +
     "rvprop=content&format=json%s";

 /**
  * Partial URL to append to {@link #WIKTIONARY_PAGE} when you want to expand
  * any templates found on the requested page. This is useful when browsing
  * full entries, but may use more network bandwidth.
  */
 private static final String WIKTIONARY_EXPAND_TEMPLATES =
   "&rvexpandtemplates=true";

 /**
  * {@link StatusLine} HTTP status code when no server error has occurred.
  */
 private static final int HTTP_STATUS_OK = 200;

 /**
  * Shared buffer used by {@link #getUrlContent(String)} when reading results
  * from an API request.
  */
 private static byte[] sBuffer = new byte[512];

 /**
  * User-agent string to use when making requests. Should be filled using
  * {@link #prepareUserAgent(Context)} before making any other calls.
  */
 private static String sUserAgent = null;

 /**
  * Thrown when there were problems contacting the remote API server, either
  * because of a network error, or the server returned a bad status code.
  */
 public static class ApiException extends Exception {
  public ApiException(String detailMessage, Throwable throwable) {
   super(detailMessage, throwable);
  }

  public ApiException(String detailMessage) {
   super(detailMessage);
  }
 }

 /**
  * Thrown when there were problems parsing the response to an API call,
  * either because the response was empty, or it was malformed.
  */
 public static class ParseException extends Exception {
  public ParseException(String detailMessage, Throwable throwable) {
   super(detailMessage, throwable);
  }
 }

 /**
  * Prepare the internal User-Agent string for use. This requires a
  * {@link Context} to pull the package name and version number for this
  * application.
  */
 public static void prepareUserAgent(Context context) {
  try {
   // Read package name and version number from manifest
   PackageManager manager = context.getPackageManager();
   PackageInfo info = manager.getPackageInfo(context.getPackageName(), 0);
   sUserAgent = String.format(context.getString(R.string.template_user_agent),
     info.packageName, info.versionName);

  } catch(NameNotFoundException e) {
   Log.e(TAG, "Couldn't find package information in PackageManager", e);
  }
 }

 /**
  * Read and return the content for a specific Wiktionary page. This makes a
  * lightweight API call, and trims out just the page content returned.
  * Because this call blocks until results are available, it should not be
  * run from a UI thread.
  *
  * @param title The exact title of the Wiktionary page requested.
  * @param expandTemplates If true, expand any wiki templates found.
  * @return Exact content of page.
  * @throws ApiException If any connection or server error occurs.
  * @throws ParseException If there are problems parsing the response.
  */
 public static String getPageContent(String title, boolean expandTemplates)
   throws ApiException, ParseException {
  // Encode page title and expand templates if requested
  String encodedTitle = Uri.encode(title);
  String expandClause = expandTemplates ? WIKTIONARY_EXPAND_TEMPLATES : "";

  // Query the API for content
  String content = getUrlContent(String.format(WIKTIONARY_PAGE,
    encodedTitle, expandClause));
  try {
   // Drill into the JSON response to find the content body
   JSONObject response = new JSONObject(content);
   JSONObject query = response.getJSONObject("query");
   JSONObject pages = query.getJSONObject("pages");
   JSONObject page = pages.getJSONObject((String) pages.keys().next());
   JSONArray revisions = page.getJSONArray("revisions");
   JSONObject revision = revisions.getJSONObject(0);
   return revision.getString("*");
  } catch (JSONException e) {
   throw new ParseException("Problem parsing API response", e);
  }
 }

 /**
  * Pull the raw text content of the given URL. This call blocks until the
  * operation has completed, and is synchronized because it uses a shared
  * buffer {@link #sBuffer}.
  *
  * @param url The exact URL to request.
  * @return The raw content returned by the server.
  * @throws ApiException If any connection or server error occurs.
  */
 protected static synchronized String getUrlContent(String url) throws ApiException {
  if (sUserAgent == null) {
   throw new ApiException("User-Agent string must be prepared");
  }

  // Create client and set our specific user-agent string
  HttpClient client = new DefaultHttpClient();
  HttpGet request = new HttpGet(url);
  request.setHeader("User-Agent", sUserAgent);

  try {
   HttpResponse response = client.execute(request);

   // Check if server response is valid
   StatusLine status = response.getStatusLine();
   if (status.getStatusCode() != HTTP_STATUS_OK) {
    throw new ApiException("Invalid response from server: " +
      status.toString());
   }

   // Pull content stream from response
   HttpEntity entity = response.getEntity();
   InputStream inputStream = entity.getContent();

   ByteArrayOutputStream content = new ByteArrayOutputStream();

   // Read response into a buffered stream
   int readBytes = 0;
   while ((readBytes = inputStream.read(sBuffer)) != -1) {
    content.write(sBuffer, 0, readBytes);
   }

   // Return result from buffered stream
   return new String(content.toByteArray());
  } catch (IOException e) {
   throw new ApiException("Problem communicating with API", e);
  }
 }
}


import android.app.PendingIntent;
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.net.Uri;
import android.os.IBinder;
import android.text.format.Time;
import android.util.Log;
import android.widget.RemoteViews;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Define a simple widget that shows the Wiktionary "Word of the day." To build
 * an update we spawn a background {@link Service} to perform the API queries.
 */
public class WordWidget extends AppWidgetProvider {
 @Override
 public void onUpdate(Context context, AppWidgetManager appWidgetManager,
   int[] appWidgetIds) {
  // To prevent any ANR timeouts, we perform the update in a service
  context.startService(new Intent(context, UpdateService.class));
 }

 public static class UpdateService extends Service {
  @Override
  public void onStart(Intent intent, int startId) {
   // Build the widget update for today
   RemoteViews updateViews = buildUpdate(this);

   // Push update for this widget to the home screen
   ComponentName thisWidget = new ComponentName(this, WordWidget.class);
   AppWidgetManager manager = AppWidgetManager.getInstance(this);
   manager.updateAppWidget(thisWidget, updateViews);
  }

  /**
   * Build a widget update to show the current Wiktionary
   * "Word of the day." Will block until the online API returns.
   */
  public RemoteViews buildUpdate(Context context) {
   // Pick out month names from resources
   Resources res = context.getResources();
   String[] monthNames = res.getStringArray(R.array.month_names);

   // Find current month and day
   Time today = new Time();
   today.setToNow();

   // Build today's page title, like "Wiktionary:Word of the day/March 21"
   String pageName = res.getString(R.string.template_wotd_title,
     monthNames[today.month], today.monthDay);
   RemoteViews updateViews = null;
   String pageContent = "";

   try {
    // Try querying the Wiktionary API for today's word
    SimpleWikiHelper.prepareUserAgent(context);
    pageContent = SimpleWikiHelper.getPageContent(pageName, false);
   } catch (ApiException e) {
    Log.e("WordWidget", "Couldn't contact API", e);
   } catch (ParseException e) {
    Log.e("WordWidget", "Couldn't parse API response", e);
   }

   // Use a regular expression to parse out the word and its definition
   Pattern pattern = Pattern.compile(SimpleWikiHelper.WORD_OF_DAY_REGEX);
   Matcher matcher = pattern.matcher(pageContent);
   if (matcher.find()) {
    // Build an update that holds the updated widget contents
    updateViews = new RemoteViews(context.getPackageName(), R.layout.widget_word);

    String wordTitle = matcher.group(1);
    updateViews.setTextViewText(R.id.word_title, wordTitle);
    updateViews.setTextViewText(R.id.word_type, matcher.group(2));
    updateViews.setTextViewText(R.id.definition, matcher.group(3).trim());

    // When user clicks on widget, launch to Wiktionary definition page
    String definePage = res.getString(R.string.template_define_url,
      Uri.encode(wordTitle));
    Intent defineIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(definePage));
    PendingIntent pendingIntent = PendingIntent.getActivity(context,
      0 /* no requestCode */, defineIntent, 0 /* no flags */);
    updateViews.setOnClickPendingIntent(R.id.widget, pendingIntent);

   } else {
    // Didn't find word of day, so show error message
    updateViews = new RemoteViews(context.getPackageName(), R.layout.widget_message);
    CharSequence errorMessage = context.getText(R.string.widget_error);
    updateViews.setTextViewText(R.id.message, errorMessage);
   }
   return updateViews;
  }

  @Override
  public IBinder onBind(Intent intent) {
   // We don't need to bind to this service
   return null;
  }
 }
}

[ Read More ]
Read more...
Saturday, October 20, 2012

App in android for random quote generation

Posted by Raju Gupta at 3:05 AM – 1 comments
 

the class data helper establishes connection with database code generator inserts the quotes with keywords in database randomcodes class toasts the random quote

import android.app.Activity;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class RandomCodes extends  ListActivity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);
        String[] category = getResources().getStringArray(R.array.category_array);
     setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, category));

     final ListView lv = getListView();
     lv.setTextFilterEnabled(true);
    
     lv.setOnItemClickListener(new OnItemClickListener() {
    @Override
       public void onItemClick(AdapterView<?> parent, View view,
           int position, long id) {
         // When clicked, show a toast with the TextView text
        // Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
         //Toast.LENGTH_SHORT).show();
       
       Intent switchIntent= new Intent(getBaseContext(),CodeGenerator.class);
      
     switchIntent.putExtra("myKey",((TextView) view).getText().toString());
     
     startActivity(switchIntent);
     
     
       }
     });
   // Button random=(Button)findViewById(R.id.Button01);
    
    
    }
}



import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

public class CodeGenerator extends Activity {
 private Datahelper dh;
 private TextView output;
 String category;
 String quote; 
  @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.db);
         this.output = (TextView) this.findViewById(R.id.out_text);
          System.out.println("hello");
         this.dh = new Datahelper(this);
         this.dh.deleteAll();
         this.dh.insert("Fortune and love favor the brave.","Miscellinious");
         this.dh.insert("Honesty is the best policy.","Honesty");
         this.dh.insert("Work is worship.","Wisdom");
         this.dh.insert("Health is Wealth","Health");
         this.dh.insert("The value of achievement lies in the achieving.---Albert Einstien","FamousPersonalities");
         this.dh.insert("If I loved you less, I might be able to talk about it more.","Love");
         this.dh.insert("Friendship is most beautiful thing in life","Friendship");
         this.dh.insert("If it's very painful for you to criticize your friends - you're safe in doing it. But if you take the slightest pleasure in it, that's the time to hold your tongue","Wisdom");
         this.dh.insert("Without hard work, nothing grows but weeds","Hardwork");
         this.dh.insert("We must become the change we want to see","Wisdom");
         this.dh.insert("A man's moral worth is not measured by what his religious beliefs are but rather by what emotional impulses he has received from Nature during his lifetime","Religious");
         this.dh.insert("Dream is some thing what we dont see in sleep it is something that does allow u to sleep.---APJ Abdul Kalam","FamousPersonalities");
         Bundle extras = getIntent().getExtras();
         category= extras.getString("myKey");
        System.out.println(category+"=================");
         
         List<String> names = this.dh.selectAll(quote,category);
          StringBuilder sb = new StringBuilder();
          
          sb.append("" +
            "The available quotes in category are:: nn");
          for (String name : names) {
             sb.append(name +"nn");
          }
           System.out.println("output of sb   ---->"+sb);
          Log.d("EXAMPLE", "names size - " + names.size());
           
          this.output.setText(sb.toString());
           
      }
 
}



import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteStatement;
import android.util.Log;
 
import java.util.ArrayList;
import java.util.List;
 
public class Datahelper {
 
   private static final String DATABASE_NAME = "codes_391184_new.db";
   private static final int DATABASE_VERSION = 1;
   private static final String 
[ Read More ]
Read more...
Friday, October 19, 2012

Implementing ListView-Adapter in Android

Posted by Raju Gupta at 11:02 PM – 0 comments
 

This simple example creates
a new to-do list application using native Android View controls.Some of the features used
to create this application, includes ArrayAdapters, ListViews, and KeyListeners.
following files are required ,
1.java file(Activity)
2.main.xml
3.Another xml holding the textview.(in this ex: simple.xml)

Main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <EditText android:id="@+id/edittext"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="enter to add to the list"/>
 <ListView android:id="@+id/listView"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>
</LinearLayout>

Sample.xml

<?xml version="1.0" encoding="utf-8"?>

    <TextView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnKeyListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;

public class to_do_list_activity extends Activity {

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

       //get reference to UI widgets
       final EditText text=(EditText) findViewById(R.id.edittext);
        ListView list=(ListView) findViewById(R.id.listView);

        //arraylist to store the items
        final ArrayList<string> al=new ArrayList<string>();

        // Create the array adapter to bind the array to the listview
        final ArrayAdapter<string> aa=new ArrayAdapter<string>(this, R.layout.simple, al);

       // Bind the array adapter to the listview.
        list.setAdapter(aa);
        text.setOnKeyListener(new OnKeyListener() {
  
  public boolean onKey(View v, int keyCode, KeyEvent event) {
   // TODO Auto-generated method stub
   
   if(event.getAction()==KeyEvent.ACTION_DOWN)
   if(keyCode==KeyEvent.KEYCODE_DPAD_CENTER) 
   {
   al.add(0,text.getText().toString());
   aa.notifyDataSetChanged();
   text.setText("");
   return true;
  }
   return false;
  }
 });
    }
}
[ Read More ]
Read more...
Thursday, October 18, 2012

Extract all java classes from APK

Posted by Raju Gupta at 10:56 PM – 0 comments
 

Step 1: Download "dex2jar-0.0.7.8-SNAPSHOT.zip" package from web. This package can be downloaded from "http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.7.8-SNAPSHOT.zip&can=2&q="

Step 2: Extract the package into local folder.

Step 3: Run the following command from console.

> dex2jar "C:\Apk file path\apk file name"

Step 4: Use "jd-gui" (or any class extraction tool) to convert jar to java. Which can be downloaded from "http://www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/JD-GUI.shtml" OR download it from attached Artifacts   
[ Read More ]
Read more...
Wednesday, October 17, 2012

Get XML from APK

Posted by Raju Gupta at 10:54 PM – 0 comments
 

Step 1. Pass the <APK> file path+name in getIntents(...) method.
Step 2. Run the attached code.

This will convert all layout xmls and extract all files in same directory struture as defined.

import java.io.InputStream;
import java.util.jar.JarFile;

public class Test {

 public static void main(String[] args) {
  Test t = new Test();
  t.getIntents("C:\android\apk\TestPlayer.apk");
  System.out.println("complete ...");
 }

 public void getIntents(String path) {
    try {
      JarFile jf = new JarFile(path);
      InputStream is = jf.getInputStream(jf.getEntry("main.xml"));
      byte[] xml = new byte[is.available()];
      int br = is.read(xml);
      //Tree tr = TrunkFactory.newTree();
      System.out.println("calling ...");
      decompressXML(xml);
      //prt("XMLn"+tr.list());
    } catch (Exception ex) {
     ex.printStackTrace();
      //console.log("getIntents, ex: "+ex);  ex.printStackTrace();
    }
  } // end of getIntents

 
 
 
 
 // decompressXML -- Parse the 'compressed' binary form of Android XML docs 
 // such as for AndroidManifest.xml in .apk files
 public static int endDocTag = 0x00100101;
 public static int startTag =  0x00100102;
 public static int endTag =    0x00100103;
 public void decompressXML(byte[] xml) {
 // Compressed XML file/bytes starts with 24x bytes of data,
 // 9 32 bit words in little endian order (LSB first):
 //   0th word is 03 00 08 00
 //   3rd word SEEMS TO BE:  Offset at then of StringTable
 //   4th word is: Number of strings in string table
 // WARNING: Sometime I indiscriminently display or refer to word in 
 //   little endian storage format, or in integer format (ie MSB first).
 int numbStrings = LEW(xml, 4*4);

 // StringIndexTable starts at offset 24x, an array of 32 bit LE offsets
 // of the length/string data in the StringTable.
 int sitOff = 0x24;  // Offset of start of StringIndexTable

 // StringTable, each string is represented with a 16 bit little endian 
 // character count, followed by that number of 16 bit (LE) (Unicode) chars.
 int stOff = sitOff + numbStrings*4;  // StringTable follows StrIndexTable

 // XMLTags, The XML tag tree starts after some unknown content after the
 // StringTable.  There is some unknown data after the StringTable, scan
 // forward from this point to the flag for the start of an XML start tag.
 int xmlTagOff = LEW(xml, 3*4);  // Start from the offset in the 3rd word.
 // Scan forward until we find the bytes: 0x02011000(x00100102 in normal int)
 for (int ii=xmlTagOff; ii<xml.length-4; ii+=4) {
   if (LEW(xml, ii) == startTag) { 
     xmlTagOff = ii;  break;
   }
 } // end of hack, scanning for start of first start tag

 // XML tags and attributes:
 // Every XML start and end tag consists of 6 32 bit words:
 //   0th word: 02011000 for startTag and 03011000 for endTag 
 //   1st word: a flag?, like 38000000
 //   2nd word: Line of where this tag appeared in the original source file
 //   3rd word: FFFFFFFF ??
 //   4th word: StringIndex of NameSpace name, or FFFFFFFF for default NS
 //   5th word: StringIndex of Element Name
 //   (Note: 01011000 in 0th word means end of XML document, endDocTag)

 // Start tags (not end tags) contain 3 more words:
 //   6th word: 14001400 meaning?? 
 //   7th word: Number of Attributes that follow this tag(follow word 8th)
 //   8th word: 00000000 meaning??

 // Attributes consist of 5 words: 
 //   0th word: StringIndex of Attribute Name's Namespace, or FFFFFFFF
 //   1st word: StringIndex of Attribute Name
 //   2nd word: StringIndex of Attribute Value, or FFFFFFF if ResourceId used
 //   3rd word: Flags?
 //   4th word: str ind of attr value again, or ResourceId of value

 // TMP, dump string table to tr for debugging
 //tr.addSelect("strings", null);
 //for (int ii=0; ii<numbStrings; ii++) {
 //  // Length of string starts at StringTable plus offset in StrIndTable
 //  String str = compXmlString(xml, sitOff, stOff, ii);
 //  tr.add(String.valueOf(ii), str);
 //}
 //tr.parent();

 // Step through the XML tree element tags and attributes
 int off = xmlTagOff;
 int indent = 0;
 int startTagLineNo = -2;
 while (off < xml.length) {
   int tag0 = LEW(xml, off);
   //int tag1 = LEW(xml, off+1*4);
   int lineNo = LEW(xml, off+2*4);
   //int tag3 = LEW(xml, off+3*4);
   int nameNsSi = LEW(xml, off+4*4);
   int nameSi = LEW(xml, off+5*4);

   if (tag0 == startTag) { // XML START TAG
     int tag6 = LEW(xml, off+6*4);  // Expected to be 14001400
     int numbAttrs = LEW(xml, off+7*4);  // Number of Attributes to follow
     //int tag8 = LEW(xml, off+8*4);  // Expected to be 00000000
     off += 9*4;  // Skip over 6+3 words of startTag data
     String name = compXmlString(xml, sitOff, stOff, nameSi);
     //tr.addSelect(name, null);
     startTagLineNo = lineNo;

     // Look for the Attributes
     StringBuffer sb = new StringBuffer();
     for (int ii=0; ii<numbAttrs; ii++) {
       int attrNameNsSi = LEW(xml, off);  // AttrName Namespace Str Ind, or FFFFFFFF
       int attrNameSi = LEW(xml, off+1*4);  // AttrName String Index
       int attrValueSi = LEW(xml, off+2*4); // AttrValue Str Ind, or FFFFFFFF
       int attrFlags = LEW(xml, off+3*4);  
       int attrResId = LEW(xml, off+4*4);  // AttrValue ResourceId or dup AttrValue StrInd
       off += 5*4;  // Skip over the 5 words of an attribute

       String attrName = compXmlString(xml, sitOff, stOff, attrNameSi);
       String attrValue = attrValueSi!=-1
         ? compXmlString(xml, sitOff, stOff, attrValueSi)
         : "resourceID 0x"+Integer.toHexString(attrResId);
       sb.append(" "+attrName+"=""+attrValue+""");
       //tr.add(attrName, attrValue);
     }
     prtIndent(indent, "<"+name+sb+">");
     indent++;

   } else if (tag0 == endTag) { // XML END TAG
     indent--;
     off += 6*4;  // Skip over 6 words of endTag data
     String name = compXmlString(xml, sitOff, stOff, nameSi);
     prtIndent(indent, "</"+name+">  (line "+startTagLineNo+"-"+lineNo+")");
     //tr.parent();  // Step back up the NobTree

   } else if (tag0 == endDocTag) {  // END OF XML DOC TAG
     break;

   } else {
     System.out.println("  Unrecognized tag code '"+Integer.toHexString(tag0)
       +"' at offset "+off);
     break;
   }
 } // end of while loop scanning tags and attributes of XML tree
 System.out.println("    end at offset "+off);
 } // end of decompressXML


 public String compXmlString(byte[] xml, int sitOff, int stOff, int strInd) {
   if (strInd < 0) return null;
   int strOff = stOff + LEW(xml, sitOff+strInd*4);
   return compXmlStringAt(xml, strOff);
 }


 public static String spaces = "                                             ";
 public void prtIndent(int indent, String str) {
  System.out.println(spaces.substring(0, Math.min(indent*2, spaces.length()))+str);
 }


 // compXmlStringAt -- Return the string stored in StringTable format at
 // offset strOff.  This offset points to the 16 bit string length, which 
 // is followed by that number of 16 bit (Unicode) chars.
 public String compXmlStringAt(byte[] arr, int strOff) {
   int strLen = arr[strOff+1]<<8&0xff00 | arr[strOff]&0xff;
   byte[] chars = new byte[strLen];
   for (int ii=0; ii<strLen; ii++) {
     chars[ii] = arr[strOff+2+ii*2];
   }
   return new String(chars);  // Hack, just use 8 byte chars
 } // end of compXmlStringAt


 // LEW -- Return value of a Little Endian 32 bit word from the byte array
 //   at offset off.
 public int LEW(byte[] arr, int off) {
   return arr[off+3]<<24&0xff000000 | arr[off+2]<<16&0xff0000
     | arr[off+1]<<8&0xff00 | arr[off]&0xFF;
 } // end of LEW


}
[ Read More ]
Read more...
Saturday, October 13, 2012

Sending SMS from the Android Application

Posted by Raju Gupta at 12:48 PM – 0 comments
 
"android.telephony.SmsManager" Class or "android.telephony.gsm.SmsManager" Class according to the SDK level of the device.
import java.lang.reflect.Method;
import java.util.ArrayList;

/**
 * This class implements the SMSSender interface, as defined in Common/DAL/SmsSenderI.h
 * 
 * Reflection feature is used to manage "android.telephony.SmsManager" Class or 
 * "android.telephony.gsm.SmsManager" Class according to the SDK level of the device.
 */
public class SmsSender
{
 /**
  * @brief the sendSMS operation.
  * 
  * The sendSMS operation sends an sms according to the address and the message itself.
  * 
  * @param the address
  * @param the message
  */
 public static int sendSMS(String sAddress, String sMessage)
 {
  int nRes = RMEError.ERMSuccess;

  try
  {
   Object oSmsManager;
   Method oGetDefaultMethod;
   Method oSendMultipartTextMessageMethod;
   Method oDivideMessageMethod;
   ArrayList<String> oDevideMessage;

   if(Globals.API_LEVEL >= 4)
   {
    oSmsManager = Class.forName("android.telephony.SmsManager");
   }
   else
   {
    oSmsManager = Class.forName("android.telephony.gsm.SmsManager");
   }

   oGetDefaultMethod = ((Class)oSmsManager).getMethod("getDefault", (Class[]) null);
   oSendMultipartTextMessageMethod = ((Class)oSmsManager).getMethod("sendMultipartTextMessage", new Class[] {String.class, String.class, ArrayList.class, ArrayList.class, ArrayList.class});
   oDivideMessageMethod = ((Class)oSmsManager).getMethod("divideMessage", new Class[] {String.class});

   oSmsManager = oGetDefaultMethod.invoke(oSmsManager);
   oDevideMessage = (ArrayList<String>)oDivideMessageMethod.invoke(oSmsManager, sMessage);
   oSendMultipartTextMessageMethod.invoke(oSmsManager, sAddress, null, oDevideMessage, null, null);
  }
  catch (Exception e)
  {

  }

  return nRes;
 }
}
[ Read More ]
Read more...
Thursday, October 11, 2012

How to create Drop Down in Android

Posted by Raju Gupta at 2:04 PM – 0 comments
 
It will helps in creating a dynamic drop down in the xml(i.e for font end) and helps in selecting the particular item in the dropdown dynimally. For dynamic selection of items in dropdown the code is written in .java file


 <?xml version="1.0" encoding="utf-8" ?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"  android:layout_width="fill_parent" 
 android:layout_height="fill_parent">


<Spinner android:id="@+id/spinner"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:prompt="@string/account_prompt"
 android:minWidth="180px" 
 android:layout_below="@+id/accimage" /> 



<?xml version="1.0" encoding="utf-8" ?> 
 <resources>
  <string name="hello">Hello World, PersonActivity!</string> 
  <string name="app_name">P2P</string> 
  <string name="account_prompt">Select Account</string> 
 <string-array name="accounts_array">
  <item>Saving Account</item> 
  <item>Current Account</item> 
  <item>Demat Account</item> 
  </string-array>
  </resources>

//.java file::: For dynamic selection on items in dropdown

import android.view.View;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemSelectedListener;

public class SpinnerActivity implements OnItemSelectedListener {

 @Override
 public void onItemSelected(AdapterView<?> PersonActivity, View view, int pos, 
   long id) {
  Toast.makeText(PersonActivity.getContext(), "The acounts" +  PersonActivity.getItemAtPosition(pos).toString(),
    Toast.LENGTH_LONG).show();
  
 }

 @Override
 public void onNothingSelected(AdapterView<?> PersonActivity) {
  //Do nothing
  
 }   
 
}
[ Read More ]
Read more...

Android Page Navigation

Posted by Raju Gupta at 1:58 PM – 0 comments
 
This Code snippet tells how to navigate from one page to another page in android.
public class FirstScreen extends Activity {

 Private Button button;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  // get button from xml
  setNavigation();
 }

 public void setNavigation() {
  OnClickListener buttonListener = new OnClickListener() {
  
   @Override
   public void onClick(View v) {
    String key1, key2;
    String value1, value2;
    // get the values
    Intent i = new Intent(FirstScreen.this, SecondScreen.class);
    i.putExtra(key1, value1);
    i.putExtra(key2, value2);
    startActivity(i);
   }
  };
  button.setOnClickListener(buttonListener);
 }
}

public void SecondScreen extends Activity {
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  
  String value1 = getIntent().getStringExtra(key1);
  String value2 = getIntent().getStringExtra(key2);
 }
}




[ Read More ]
Read more...
Wednesday, October 10, 2012

To retrieve the cell info for Android device

Posted by Raju Gupta at 1:48 PM – 0 comments
 

Information has been extracted from TelephonyManager. TelephonyManager provides access to information about the telephony services on the device. Applications can use the methods in this class to determine telephony services and states, as well as to access some types of subscriber information

public static int[] getCellInfo()
   {
      // VARs
      int[] oRes = new int[5];
      Context oContext = Globals.m_oContext;
      TelephonyManager oTelManager = (TelephonyManager)oContext.getSystemService(Context.TELEPHONY_SERVICE);
      
      try
      {
         // Retrieve MCC and MNC
         String sMCC_MNC = oTelManager.getNetworkOperator();
         if ( (sMCC_MNC != null) && (sMCC_MNC.length() >= 5) ) // It contains numeric name (MCC+MNC) of current registered operator
         {
            oRes[1] = Integer.parseInt(sMCC_MNC.substring(0, 3));
            oRes[2] = Integer.parseInt(sMCC_MNC.substring(3));
         }
         
         // Retrieve LAC and CellID
         CellLocation oCell = oTelManager.getCellLocation();
         if (oCell instanceof GsmCellLocation)
         {
            oRes[3] =  ((GsmCellLocation)oCell).getLac();
            oRes[4] =  ((GsmCellLocation)oCell).getCid();
         }
         
        }
      catch (Exception e)
      {
         
      }

      return oRes;
   }
}



[ Read More ]
Read more...

Creating the enrty in the agenda for Android devices.

Posted by Raju Gupta at 1:43 PM – 0 comments
 
ContentResolver class is used to add the agenda. This will work for all the android SDK i.e. 1.5 and above. Offset for the timezone has been added so that it should work irrespective of UTC timezone.
public static int createEntry(String sEntryText, long nStartTime)
{
 // VARs
 Uri oUri;
 // Add the timezone offset to the UTC time
 nStartTime -= TimeZone.getDefault().getOffset(System.currentTimeMillis()) / 1000;

 if(Globals.API_LEVEL >= 8)
 {
  oUri = EVENTS_CONTENT_URI_LEVEL_8;
 }
 else
 {
  oUri = EVENTS_CONTENT_URI;
 }

 ContentResolver oContentResolver = Globals.m_oRichMediaDriver.m_oActivity.getContentResolver(); 

 // Create the calendar entry
 ContentValues oValues = new ContentValues();     
 oValues.put(EVENTS_CALENDAR_ID, 1);   
 oValues.put(EVENTS_DT_START, nStartTime * 1000);
 oValues.put(EVENTS_DESCRIPTION, sEntryText);
 // Also define the title field
 oValues.put(EVENTS_TITLE, sEntryText);

 try
 {
  // Insert the new calendar entry in the calendar of the device.
  oContentResolver.insert(oUri, oValues); 
 }
 catch (Exception e)
 {

 }

}

[ Read More ]
Read more...
Tuesday, October 9, 2012

Test Application for Samsung Android devices

Posted by Raju Gupta at 1:39 PM – 0 comments
 
This test application write the traces from device to confirm the device behaviour.


import java.io.File;

import android.app.Activity;
import android.os.Bundle;

public class PreCachingIssueApp extends Activity
{
   private String m_sAppDir = null;
   
   public void onCreate(Bundle savedInstanceState)
   {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      try
      {
         m_sAppDir = getPackageManager().getApplicationInfo(getPackageName(), 0).dataDir + "/files/";

         File oInstallDir = new File(m_sAppDir);
         
         if (!oInstallDir.exists())
         {
            oInstallDir.mkdir();
         }
         else
         {
            android.util.Log.i("PreCachingIssue", "last modified date of the private data dir: "+oInstallDir.lastModified());
         }
      }
      catch (Exception e)
      {
      }
   }
}

[ Read More ]
Read more...
Monday, October 8, 2012

Color Picker from Image in Android

Posted by Raju Gupta at 1:33 PM – 0 comments
 
It implements OnTouch listener, and by using MotionEvent object gets the co-ordinates of touch point. These co-ordinates are used to get color from Image.
// Step 1: create xml layout containing a linear layout with Image view & linear layout

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:id="@+id/linearLayout"
 android:layout_height="fill_parent" android:layout_width="fill_parent"
 android:clickable="false">
 <ImageView android:id="@+id/imgView" android:layout_width="fill_parent"
  android:layout_height="380dip"></ImageView>
 <LinearLayout android:orientation="horizontal"
  android:layout_width="fill_parent" android:id="@+id/linearbaseRow"
  android:background="@color/white" android:gravity="bottom"
  android:layout_height="50dip">
 </LinearLayout>

</LinearLayout>


//Step 2: in java code, implement a OnTouch listener  and display color.

public class ColorPicker extends Activity {

 private final int DIALOG_SINGLE_CHOICE = 0;
 LinearLayout linearlayout, linearBaseRow;
 ImageView imgView, showColor;
 int color = 0;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.color_picker_layout);

  linearlayout = (LinearLayout) findViewById(R.id.linearLayout);
  linearBaseRow = (LinearLayout) findViewById(R.id.linearbaseRow);
  imgView = (ImageView) findViewById(R.id.imgView);

  imgView.setBackgroundResource(R.drawable.backgroundimage);
 }

@Override
 public boolean onTouchEvent(MotionEvent event) { 
  try {
   //get access to base layout

   View tempView = linearlayout.getRootView();
   tempView.setDrawingCacheEnabled(true);//enable cache

   Bitmap temBitmap = tempView.getDrawingCache(); //get cache
   color = temBitmap.getPixel((int) event.getX(), (int) event
     .getY());
   showColor();
  } catch (Exception Ex) {

  }
  return true;
 }

 private void showColor(){
  linearBaseRow.setBackgroundColor(color);
 }
@Override
 protected void onDestroy() {
  imgView = null;
  dialog = null;
  super.onDestroy();
 }

}

[ Read More ]
Read more...

Image Switcher & Gallery in Android

Posted by Raju Gupta at 1:22 PM – 1 comments
 

Step 1 : create a simple Linear-layout with an ImageSwitcher & a gallery view.
Step 2: include neccessary animation xml files , like fade in, fade out.   

public class MyImageSwitcher extends Activity implements
        AdapterView.OnItemSelectedListener, ViewSwitcher.ViewFactory {
 
// create array of thumbnail & image Ids 
private Integer[] mThumbIds = {  
      R.drawable.homeapp1,R.drawable.homeapp3,R.drawable.homeapp4};
    private Integer[] mImageIds = {R.drawable.homeapp1,R.drawable.homeapp3,R.drawable.homeapp4};
 
 String category;
 ViewFlipper mFlipper;
  private ImageSwitcher mSwitcher;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.image_switcher_1);

        mSwitcher = (ImageSwitcher) findViewById(R.id.switcher);
        mSwitcher.setFactory(this);
        mSwitcher.setInAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_in));
        mSwitcher.setOutAnimation(AnimationUtils.loadAnimation(this,
                android.R.anim.fade_out));

        Gallery g = (Gallery) findViewById(R.id.gallery);
        g.setAdapter(new ImageAdapter(this));
        g.setOnItemSelectedListener(this);
    }

    public void onItemSelected(AdapterView parent, View v, int position, long id) {   
     mSwitcher.setImageResource(mImageIds[position]);
    }

    public void onNothingSelected(AdapterView parent) {
    }

    public View makeView() {
        ImageView i = new ImageView(this);
        i.setBackgroundColor(0xFF000000);
        i.setScaleType(ImageView.ScaleType.FIT_CENTER);
        i.setLayoutParams(new  ImageSwitcher.LayoutParams(LayoutParams.FILL_PARENT,
                LayoutParams.FILL_PARENT));
        return i;
    }

    public class ImageAdapter extends BaseAdapter {
        //write your own implementation for returning Images from getView method

    }    
}
[ Read More ]
Read more...

Andorid application that listens to incoming sms

Posted by Raju Gupta at 1:06 PM – 0 comments
 

An android app that sits on a phone and listens to incoming sms and makes a http call in format

http://youtestserver.com/pushMsg.php?from=999999999&body=Hi there   
import java.lang.reflect.Array;
import java.util.*;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import android.provider.Settings.System;
import android.telephony.TelephonyManager.*;
import android.telephony.gsm.SmsManager;
import android.telephony.gsm.SmsMessage;
import android.util.Log;
import java.net.*;
import java.io.*;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.DefaultHttpClient;

public class SMSIntentReceiver extends BroadcastReceiver
{

 //@Override
 public void onReceive(Context context, Intent intent)
 {
 try   
 {
  if(intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
  {
   
    
    Bundle bundle = intent.getExtras();        
          SmsMessage[] msgs = null;
          String str = "";            
          if (bundle != null)
          {
              
              Object[] pdus = (Object[]) bundle.get("pdus");
              msgs = new SmsMessage[pdus.length];
              
              for (int i=0; i<msgs.length; i++)
              {
                  msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]); 
                  
                  URL url = new URL("http://mytestserver.com/pushMsg.php?s=c0mputer&f="+URLEncoder.encode(msgs[i].getOriginatingAddress())+"&r="+URLEncoder.encode(msgs[i].getMessageBody().toString()));
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);    // 5 seconds
            conn.setRequestMethod("GET");       
            conn.connect();
            BufferedReader rd  = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String line;
            while ((line = rd.readLine()) != null) {
                //System.out.println(line);
            }
            conn.disconnect();                  
              }
                            
          }
          
    }
   
  }
  catch(Exception e)
  {
   //java.lang.System.out.println("error occured");
  }

   }
  
}
[ Read More ]
Read more...

Accelerometer management for the Android devices

Posted by Raju Gupta at 12:44 PM – 0 comments
 
This code uses the different methods using SensorListener and SensorManager.
import android.content.Context;
import android.hardware.SensorListener;
import android.hardware.SensorManager;

/**
 * The accelerometer manager class
 */
public class AccelerometerManager implements SensorListener
{

 // The unique instance of AccelerometerManager
 private static AccelerometerManager m_oInstance = null; 

 // Object use to synchronize access to the data
 private static Object m_oLock = new Object();

 // Current acceleration on x, y and z axis
 private static float m_fX;
 private static float m_fY;
 private static float m_fZ;

 // Is the accelerometer manager started?
 private static boolean m_bIsStarted = false;

 /**
  * Initialize the accelerometer manager
  * CAUTION : This method must be called before any call to the getX/Y/Z methods
  */
 public static void initialize()
 {
  if (m_bIsStarted)
  {
   return;
  }
  SensorManager oSensorManager =  (SensorManager)Globals.m_oRichMediaDriver.m_oContext.getSystemService(Context.SENSOR_SERVICE);
  m_oInstance = new AccelerometerManager();
  oSensorManager.registerListener(m_oInstance, SensorManager.SENSOR_ACCELEROMETER, SensorManager.SENSOR_DELAY_UI);

  m_bIsStarted = true;
 }

 /**
  * Release the accelerometer manager
  * CAUTION : This method must be called when the accelerometer is not needed anymore,
  *           else the system would continue to send acceleration events uselessly 
  * @param oContext the Context 
  */
 public static void release(Context oContext)
 {
  if (!m_bIsStarted)
  {
   return;
  }
  SensorManager oSensorManager =  (SensorManager)oContext.getApplicationContext().getSystemService(Context.SENSOR_SERVICE);
  oSensorManager.unregisterListener(m_oInstance);
  m_oInstance = null;

  m_bIsStarted = false;
 }

 /**
  * The onPause CB must be called when the Context is paused
  * @param oContext the Context
  */
 public static void onPause(Context oContext)
 {
  if (m_bIsStarted)
  {
   // Unregister listener
   SensorManager oSensorManager =  (SensorManager)oContext.getApplicationContext().getSystemService(Context.SENSOR_SERVICE);
   oSensorManager.unregisterListener(m_oInstance);
  }
 }

 /**
  * The onPause CB must be called when the Context is resumed
  * @param oContext the Context
  */
 public static void onResume(Context oContext)
 {
  if (m_bIsStarted)
  {
   // register listener
   SensorManager oSensorManager =  (SensorManager)oContext.getApplicationContext().getSystemService(Context.SENSOR_SERVICE);
   oSensorManager.registerListener(m_oInstance, SensorManager.SENSOR_ACCELEROMETER, SensorManager.SENSOR_DELAY_UI);
  }
 }

 /**
  * @return the deci-g acceleration in the x axis
  */
 public static int getX()
 {
  int nVal; 

  // Check if the accelerometer manager is already started
  initialize();

  synchronized(m_oLock)
  {
   nVal = (int)(100 * (m_fX/SensorManager.GRAVITY_EARTH)) ;
  }
  return nVal;
 }

 /**
  * @return the deci-g acceleration in the y axis
  */
 public static int getY()
 {
  int nVal; 

  // Check if the accelerometer manager is already started
  initialize();

  synchronized(m_oLock)
  {
   nVal = (int)(100 * (m_fY/SensorManager.GRAVITY_EARTH)) ;
  }
  return nVal;
 }

 /**
  * @return the deci-g acceleration in the z axis
  */
 public static int getZ()
 {
  int nVal; 

  // Check if the accelerometer manager is already started
  initialize();

  synchronized(m_oLock)
  {
   nVal = (int)(100 * (m_fZ/SensorManager.GRAVITY_EARTH)) ;
  }
  return nVal;
 }

 ////////////////////////
 // SensorListener part /
 ////////////////////////
 public void onAccuracyChanged(int sensor, int accuracy)
 {
 }

 public void onSensorChanged(int sensor, float[] values)
 {
  synchronized(m_oLock)
  {
   m_fX = values[SensorManager.DATA_X];
   m_fY = values[SensorManager.DATA_Y];
   m_fZ = values[SensorManager.DATA_Z];
  }
 }
}

[ Read More ]
Read more...
Newer Posts Older Posts
Subscribe to: Posts (Atom)

More Technical Blogs

  • Tech Savvy - Technology Tips
  • PHP Video Tutorial
  • Java Programs with Output
  • C Programming Tutorial
  • Linux Tutorial
  • Language Tutorial
  • Web Development tutorial
  • Popular
  • Recent
  • Archives

Popular Posts

  • Android Video Tutorial - What is Android?
    This is the first segment from a 5 week online course, Developing Android Applications with Java. In this segment, instructor Tony Hillers...
  • Android Video Tutorial: Android Application Development - Spicing up the UI
    This video comes from Marakana's 5-Day Android Bootcamp Training Course that Marko Gargenta taught in San Jose, CA earlier this year. ...
  • Android Video Tutorial: Android Application Development - Drawables
    This 60-minute tutorial will focus on Android drawables and how you can use styles and the draw9patch tool to ensure they look great and s...
  • Test Application for Samsung Android devices
    This test application write the traces from device to confirm the device behaviour. import java.io.File; import android.app.Activity; ...
  • Android Video Tutorial: Android Application Development - StatusData
    In the previous tutorial, Class 3, Part 3, you learned how to create a local database for your Android app. Now, Marko will show you how t...
  • Setting Android SDK in our Eclipse IDE
    Short video clip that shows how to set the Android SDK in our Eclipse IDE. This is one video out of five videos that explain in five steps...
  • Android Application Development Episode #6 - Notification & Long Clicks
    In this episode we will take a look at using Toast messages to notify the user. We will also take a look at the difference between normal ...
  • Android Video tutorial - Learn about Android Graphics & Animations from Google's Android UI Toolkit team
    Learn how to create awesome visuals and animations from Android UI Toolkit engineers, Romain Guy and Chet Haase. In this presentation Ro...
  • Android Video Tutorial: Android Application Development - Helloworld (anatomy of an Android app)
    Class 1, Part 2. In this 50 - minute tutorial Marko Gargenta will dissect an Android application in-order to provide you with a detailed ...
  • How to Program for Android: Video Tutorial 8 - Add and Read Text File
    How to add and read from a text file on an android device. Part 1: Part 2:
Powered by Blogger.

Archives

  • ▼  2012 (44)
    • ▼  October (31)
      • Reordering of listview
      • Text-to-Speech capability for Android Devices
      • Android Stub uninstalling the existing client and ...
      • Tab creation in android screen
      • ListView Recordering by drag drop in Android
      • Android app for SimpleWiktionary
      • App in android for random quote generation
      • Implementing ListView-Adapter in Android
      • Extract all java classes from APK
      • Get XML from APK
      • Sending SMS from the Android Application
      • How to create Drop Down in Android
      • Android Page Navigation
      • To retrieve the cell info for Android device
      • Creating the enrty in the agenda for Android devices.
      • Test Application for Samsung Android devices
      • Color Picker from Image in Android
      • Image Switcher & Gallery in Android
      • Andorid application that listens to incoming sms
      • Accelerometer management for the Android devices
      • Alert box for Confirm
      • 3D Rotation in Android
      • Custom Bar Control for Android using Java
      • Creating Layouts TableRows and TextViews dynamical...
      • Android SeekBar
      • Dialing phone number from Google Android Application
      • Login Screen Creation using Android
      • Add a Progress Bar to Android based Mobile Screens
      • Adding a button to Android based mobile screens
      • Android Dynamically generating views
      • Timezone converter
    • ►  September (3)
    • ►  March (1)
    • ►  February (9)
  • ►  2011 (69)
    • ►  December (69)
 

Followers

Labels

  • Activities (9)
  • Andoird Menu (2)
  • Android timelineActivity. (1)
  • Android Adapter (1)
  • Android app (9)
  • Android App Inventor (1)
  • Android App Publishing (2)
  • Android Application Components (3)
  • Android Application Fundamental (2)
  • Android Architecture (1)
  • Android AsyncTask (1)
  • Android Basic (7)
  • Android Bootcamp Training (18)
  • Android Button Widget (3)
  • Android Custom Style (1)
  • Android Dialog (1)
  • Android Drawable (2)
  • Android Environment (1)
  • Android example (9)
  • Android File System (2)
  • Android Geolocation (2)
  • Android ImageView (1)
  • Android Installation (8)
  • Android intents (5)
  • Android lifecycle (1)
  • Android LIst (4)
  • Android Listener (4)
  • Android Manifest (3)
  • Android Market (1)
  • Android Notification (1)
  • Android Object (1)
  • Android Package File (1)
  • Android Platform (1)
  • Android service (4)
  • Android StatusActivity (1)
  • Android Theme Style (3)
  • Android Traceview (1)
  • Android UI (6)
  • Android Unit Testing (1)
  • Android Widget (4)
  • AndroidManifest.xml (4)
  • Application Icon (1)
  • Broadcast Receiver (2)
  • Content Providers (1)
  • Creating Activities (1)
  • Creating Custom Styles in Android (1)
  • Creating Multiple Activities (1)
  • Database (3)
  • draw9patch (1)
  • Eclipse (12)
  • Explicit Intents (2)
  • Explicit Intents Example (1)
  • Hello world with Android (1)
  • Helloworld with Android (5)
  • Implicit Intents (2)
  • Implicit Intents Example (1)
  • Layout View (3)
  • lifemichael (8)
  • Location Sensor (1)
  • Multiple Activities (2)
  • Netbeans (1)
  • OpenGL ES Graphics (1)
  • Passing Values with Intents (2)
  • Project Structure (1)
  • Retrieving Image URI from Intents (1)
  • Setting Android Environment (1)
  • SQLite (3)
  • TGENT (8)
  • UserGroupAtGoogle (8)
  • XML (1)
  • xtensive arts Training (11)
 
 
© 2011 Android Development Tutorial | Designs by Web2feel & Fab Themes

Bloggerized by DheTemplate.com - Main Blogger