One place for android professionals and hobyists. Get access to the latest news, tutorials, tips, FAQs on android development and information about great android apps.
Thursday, March 31, 2011
Wednesday, March 30, 2011
Monday, March 28, 2011
Thursday, March 17, 2011
Tutorial: Using Google Translate API In Android
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"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
Translator.java:
package com.myapps.translate;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import com.google.api.translate.Language;
import com.google.api.translate.Translate;
public class Translator extends Activity {
/** Called when the activity is first created. */
String translatedText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = new TextView(this);
Translate t = new Translate();
try {
translatedText = t.execute("Bonjour le monde", Language.FRENCH, Language.ENGLISH);
//tv.setText(translatedText);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(this, translatedText, Toast.LENGTH_SHORT).show();
tv.setText(translatedText);
setContentView(tv);
}
}
Note: Download google-api-translate-java-0.95.jar from http://code.google.com/p/google-api-translate-java/downloads/list and import it as an external jar file. (Right-click project->Properties->Java Build Path-> Libraries->Add External JARS...).
<?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"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello"
/>
</LinearLayout>
Translator.java:
package com.myapps.translate;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
import com.google.api.translate.Language;
import com.google.api.translate.Translate;
public class Translator extends Activity {
/** Called when the activity is first created. */
String translatedText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TextView tv = new TextView(this);
Translate t = new Translate();
try {
translatedText = t.execute("Bonjour le monde", Language.FRENCH, Language.ENGLISH);
//tv.setText(translatedText);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Toast.makeText(this, translatedText, Toast.LENGTH_SHORT).show();
tv.setText(translatedText);
setContentView(tv);
}
}
Note: Download google-api-translate-java-0.95.jar from http://code.google.com/p/google-api-translate-java/downloads/list and import it as an external jar file. (Right-click project->Properties->Java Build Path-> Libraries->Add External JARS...).
Monday, March 14, 2011
Source Code To Display Battery Info & Chart
Following code displays battery-related details on Android phones. I programmed it on Android 1.6. The code still needs some refinement though. And the following code is inspired and extracted from the android sample code for drawings and shapes.
Visitors and members of the blog are warmly welcomed to play with it and refine it further.
ShapeDrawable1.java
package com.myapps.batterystatus;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.ComposePathEffect;
import android.graphics.CornerPathEffect;
import android.graphics.DiscretePathEffect;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.SweepGradient;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.ArcShape;
import android.graphics.drawable.shapes.OvalShape;
import android.graphics.drawable.shapes.PathShape;
import android.graphics.drawable.shapes.RectShape;
import android.graphics.drawable.shapes.RoundRectShape;
import android.graphics.drawable.shapes.Shape;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class ShapeDrawable1 extends GraphicsActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.main);
setContentView(new SampleView(this));
//startActivity(new Intent(ShapeDrawable1.this,ShapeDrawable1.class));
}
private static class SampleView extends View {
private ShapeDrawable[] mDrawables;
private TextView tv;
private static Shader makeSweep() {
return new SweepGradient(150, 50,
new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0xFFFF0000 },
null);
}
private static Shader makeLinear() {
return new LinearGradient(0, 0, 100, 100,
new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF },
null, Shader.TileMode.REPEAT);
}
private static Shader makeTiling() {
int[] pixels = new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF, 0};
Bitmap bm = Bitmap.createBitmap(pixels, 2, 2,
Bitmap.Config.ARGB_8888);
return new BitmapShader(bm, Shader.TileMode.REPEAT,
Shader.TileMode.REPEAT);
}
private static class MyShapeDrawable extends ShapeDrawable {
private Paint mStrokePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
public MyShapeDrawable(Shape s) {
super(s);
mStrokePaint.setStyle(Paint.Style.STROKE);
}
public Paint getStrokePaint() {
return mStrokePaint;
}
@Override protected void onDraw(Shape s, Canvas c, Paint p) {
s.draw(c, p);
s.draw(c, mStrokePaint);
}
private void setText(String s)
{
this.setText(s);
}
private String getText()
{
return this.getText();
}
}
public SampleView(Context context) {
super(context);
setFocusable(true);
float[] outerR = new float[] { 12, 12, 12, 12, 0, 0, 0, 0 };
RectF inset = new RectF(6, 6, 6, 6);
float[] innerR = new float[] { 12, 12, 0, 0, 12, 12, 0, 0 };
Path path = new Path();
path.moveTo(50, 0);
path.lineTo(0, 50);
path.lineTo(50, 100);
path.lineTo(100, 50);
path.close();
mDrawables = new ShapeDrawable[8];
mDrawables[0] = new ShapeDrawable(new RectShape());
mDrawables[1] = new ShapeDrawable(new OvalShape());
mDrawables[2] = new ShapeDrawable(new RoundRectShape(outerR, null,
null));
mDrawables[3] = new ShapeDrawable(new RoundRectShape(outerR, inset,
null));
mDrawables[4] = new ShapeDrawable(new RoundRectShape(outerR, inset,
innerR));
mDrawables[5] = new ShapeDrawable(new PathShape(path, 100, 100));
//Complete circle
mDrawables[6] = new MyShapeDrawable(new ArcShape(0, -365));
//Setting percentage
mDrawables[7] = new MyShapeDrawable(new ArcShape(0, BatteryLevel.perc * 365/100));
mDrawables[0].getPaint().setColor(0xFFFF0000);
mDrawables[1].getPaint().setColor(0xFF00FF00);
mDrawables[2].getPaint().setColor(0xFF0000FF);
mDrawables[3].getPaint().setShader(makeSweep());
mDrawables[4].getPaint().setShader(makeLinear());
mDrawables[5].getPaint().setShader(makeTiling());
mDrawables[6].getPaint().setColor(0xFF0000FF);
mDrawables[7].getPaint().setColor(0xFF00FF00);
PathEffect pe = new DiscretePathEffect(10, 4);
PathEffect pe2 = new CornerPathEffect(4);
mDrawables[3].getPaint().setPathEffect(
new ComposePathEffect(pe2, pe));
MyShapeDrawable msd = (MyShapeDrawable)mDrawables[6];
msd.getStrokePaint().setStrokeWidth(4);
}
@Override protected void onDraw(Canvas canvas) {
int x = 10;
int y = 10;
int width = 400;
int height = 800;
/* for (Drawable dr : mDrawables) {
dr.setBounds(x, y, x + width, y + height);
dr.draw(canvas);
y += height + 5;
}*/
/*
mDrawables[7] = new MyShapeDrawable(new ArcShape(0, -300));
mDrawables[7].getPaint().setColor(0xFF00FF00);
mDrawables[7].setBounds(x, y, 150, 150);
mDrawables[7].draw(canvas);
y += height + 5;
*/
//setting width and height and location of Pie Chart
mDrawables[6].setBounds(x, 70, 120, 170);
mDrawables[6].draw(canvas);
y += height + 5;
mDrawables[7].setBounds(x, 70, 120, 170);
mDrawables[7].draw(canvas);
y += height + 5;
}
}
}
PictureLayout.java
package com.myapps.batterystatus;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Picture;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewParent;
public class PictureLayout extends ViewGroup {
private final Picture mPicture = new Picture();
public PictureLayout(Context context) {
super(context);
}
public PictureLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public void addView(View child) {
if (getChildCount() > 10) {
throw new IllegalStateException("PictureLayout can host only one direct child");
}
super.addView(child);
}
@Override
public void addView(View child, int index) {
if (getChildCount() > 10) {
throw new IllegalStateException("PictureLayout can host only one direct child");
}
super.addView(child, index);
}
@Override
public void addView(View child, LayoutParams params) {
if (getChildCount() > 10) {
throw new IllegalStateException("PictureLayout can host only one direct child");
}
super.addView(child, params);
}
@Override
public void addView(View child, int index, LayoutParams params) {
if (getChildCount() > 10) {
throw new IllegalStateException("PictureLayout can host only one direct child");
}
super.addView(child, index, params);
}
@Override
protected LayoutParams generateDefaultLayoutParams() {
return new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
final int count = getChildCount();
int maxHeight = 480;
int maxWidth = 320;
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child.getVisibility() != GONE) {
measureChild(child, widthMeasureSpec, heightMeasureSpec);
}
}
maxWidth += getPaddingLeft() + getPaddingRight();
maxHeight += getPaddingTop() + getPaddingBottom();
Drawable drawable = getBackground();
if (drawable != null) {
maxHeight = Math.max(maxHeight, drawable.getMinimumHeight());
maxWidth = Math.max(maxWidth, drawable.getMinimumWidth());
}
setMeasuredDimension(resolveSize(maxWidth, widthMeasureSpec),
resolveSize(maxHeight, heightMeasureSpec));
}
private void drawPict(Canvas canvas, int x, int y, int w, int h,
float sx, float sy) {
canvas.save();
canvas.translate(x, y);
canvas.clipRect(0, 0, w, h);
canvas.scale(1.5f, 1.5f);
canvas.scale(sx, sy, w, h);
canvas.drawPicture(mPicture);
canvas.restore();
}
@Override
protected void dispatchDraw(Canvas canvas) {
super.dispatchDraw(mPicture.beginRecording(getWidth(), getHeight()));
mPicture.endRecording();
int x = getWidth()/2;
int y = getHeight()/2;
if (false) {
canvas.drawPicture(mPicture);
} else {
drawPict(canvas, 0, 0, x*10, y*10, 1, 1);
//drawPict(canvas, x, 0, x, y, -1, 1);
//drawPict(canvas, 0, y, x, y, 1, -1);
//drawPict(canvas, x, y, x, y, -1, -1);
}
}
@Override
public ViewParent invalidateChildInParent(int[] location, Rect dirty) {
location[0] = getLeft();
location[1] = getTop();
dirty.set(100, 100, getWidth(), getHeight());
return getParent();
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
final int count = super.getChildCount();
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child.getVisibility() != GONE) {
final int childLeft = getPaddingLeft();
final int childTop = getPaddingTop();
child.layout(childLeft, childTop,
childLeft + child.getMeasuredWidth(),
childTop + child.getMeasuredHeight());
}
}
}
}
GraphicsActivity.java
package com.myapps.batterystatus;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
//@SuppressWarnings("deprecation")
class GraphicsActivity extends Activity {
TextView tv;
String strChargingStatus="";
TextView tvChargingStatus;
TextView tvVoltage;
TextView tvTemp;
TextView tvHealth;
TextView tvTech;
LinearLayout layout;
ImageView iv;
public final int delay = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
layout = new LinearLayout(this);
layout.setBackgroundResource(R.drawable.inner);
BatteryLevel BatLvl = new BatteryLevel();
//iv = new ImageView(this);
//iv.setBackgroundResource(R.drawable.inner);
//iv.setImageResource(R.drawable.inner);
tv = new TextView(this);
tv.setText("percentage");
//Toast.makeText(this, "testing", Toast.LENGTH_SHORT).show();
tvChargingStatus = new TextView(this);
tvChargingStatus.setTextSize(10);
tvChargingStatus.setText(BatteryLevel.chargingStatus);
tvChargingStatus.setTextColor(Color.BLACK);
tvChargingStatus.setPadding(50, 175, 0, 0);
tvVoltage = new TextView(this);
tvVoltage.setText("Voltage: " + BatteryLevel.batteryVol);
tvVoltage.setTextSize(10);
tvVoltage.setTextColor(Color.BLACK);
tvVoltage.setPadding(10, 220,0,0);
tvTemp = new TextView(this);
tvTemp.setText("Temperature: " + BatteryLevel.batteryTemp);
tvTemp.setTextSize(10);
tvTemp.setTextColor(Color.BLACK);
tvTemp.setPadding(10, 240,0,0);
tvHealth = new TextView(this);
tvHealth.setText("Health: " + BatteryLevel.batteryHealth);
tvHealth.setTextSize(10);
tvHealth.setTextColor(Color.BLACK);
tvHealth.setPadding(127, 220,0,0);
//setContentView(tv);
tvTech = new TextView(this);
tvTech.setText("Technology: " + BatteryLevel.batteryTech);
tvTech.setTextSize(10);
tvTech.setTextColor(Color.BLACK);
tvTech.setPadding(127, 240,0,0);
}
@Override
public void setContentView(View view) {
tv = new TextView(this);
tv.setTextSize(40);
tv.setTextColor(Color.BLACK);
//tv.setPadding(0, 0, 10, 10);
tv.setText("\n\n " + BatteryLevel.batteryLevel);
if (true) { // set to true to test Picture
ViewGroup vg = new PictureLayout(this);
//vg.addView(iv);
vg.addView(layout);
vg.addView(tv);
//vg.addView(tvChargingStatus);
vg.addView(tvVoltage);
vg.addView(tvTemp);
vg.addView(tvHealth);
vg.addView(tvTech);
vg.addView(view);
//vg.addView(R.layout.main);
view = vg;
}
super.setContentView(view);
//this.startActivity(new Intent(GraphicsActivity.this,GraphicsActivity.class));
}
}
BatteryLevel.java
package com.myapps.batterystatus;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
import android.widget.Toast;
public class BatteryLevel extends Activity {
private TextView tvBatteryLevel;
private TextView tvBatteryTemp;
private TextView tvBatteryVol;
private TextView tvBatteryHealth;
private TextView tvBatteryTech;
private TextView tvChargingStatus;
public static String chargingStatus;
public static String batteryTemp;
public static String batteryVol;
public static String batteryHealth;
public static String batteryLevel;
public static int perc;
public static String batteryTech;
public final int delay = 2500;
private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
/*Calculating Battery Power*/
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
int level = intent.getIntExtra("level", 0);
int scale = intent.getIntExtra("scale", 100);
tvBatteryLevel.setText("Battery level: "
+ String.valueOf(level * 100 / scale) + "%");
perc = level * 100 / scale;
batteryLevel = String.valueOf(level * 100 / scale) + "%";
}
/*Calculating Battery Temperature*/
if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {
int tempLevel = intent.getIntExtra("temperature", 0);
int scale = intent.getIntExtra("scale", 100);
tvBatteryTemp.setText("Battery temperature: "
+ String.valueOf(tempLevel * 10 / scale) + " C");
batteryTemp = String.valueOf(tempLevel * 10 / scale) + " C";
}
/*Calculating Battery Voltage*/
if (Intent.ACTION_BATTERY_CHANGED.equals(action)){
int volLevel = intent.getIntExtra("voltage", 0);
int scale = intent.getIntExtra("scale", 100);
tvBatteryVol.setText("Battery voltage: "
+ String.valueOf(volLevel * 100/scale) + " mV");
batteryVol = String.valueOf(volLevel * 100/scale) + " mV";
}
/*Calculating Battery Health*/
if (Intent.ACTION_BATTERY_CHANGED.equals(action)){
int healthLvl;
String healthStatus="";
int healthLevel = intent.getIntExtra("health", 0);
int scale = intent.getIntExtra("scale", 100);
healthLvl = healthLevel * 100/scale;
switch (healthLvl)
{
case 4:
healthStatus = "Bad";
break;
case 2:
healthStatus = "Good";
break;
case 1:
healthStatus = "Dead";
break;
}
tvBatteryHealth.setText("Battery health: "
+ healthStatus);
batteryHealth = healthStatus;
}
/*Retrieving Battery Technology*/
String batteryTechnology = intent.getStringExtra("technology");
tvBatteryTech.setText("Technology:" + batteryTechnology);
batteryTech = batteryTechnology;
/*Retrieving Battery Charging Status*/
int deviceChargingStatus = intent.getIntExtra("plugged" , 0);
if (deviceChargingStatus == 0)
{
tvChargingStatus.setText("Charging Status: Not Charging");
}
else
{
tvChargingStatus.setText("Charging Status: Charging");
}
chargingStatus = (String) tvChargingStatus.getText();
//Toast.makeText(BatteryLevel.this, tvChargingStatus.getText(), Toast.LENGTH_SHORT).show();
}
};
@Override
public void onResume() {
super.onResume();
registerReceiver(mBatteryInfoReceiver, new IntentFilter(
Intent.ACTION_BATTERY_CHANGED));
}
@Override
public void onPause() {
super.onPause();
unregisterReceiver(mBatteryInfoReceiver);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tvBatteryLevel = (TextView) findViewById(R.id.tvBatteryLevel);
tvBatteryTemp = (TextView) findViewById(R.id.tvBatteryTemp);
tvBatteryVol = (TextView) findViewById(R.id.tvBatteryVol);
tvBatteryHealth = (TextView) findViewById(R.id.tvBatteryHealth);
tvBatteryTech = (TextView) findViewById (R.id.tvBatteryTech);
tvChargingStatus = (TextView)findViewById(R.id.tvChargingStatus);
new Handler().postDelayed(new Runnable(){
public void run(){
startActivity(new Intent(BatteryLevel.this, ShapeDrawable1.class));
//Splash.this.finish();
}
}, delay);
}
}
Thursday, March 3, 2011
Wednesday, March 2, 2011
Subscribe to:
Posts (Atom)