Ad

Thursday, July 31, 2014

Download and parse XML in android

HttpClient client=new DefaultHttpClient();
            HttpGet request=new HttpGet(url);
            File xmlfile=new File(Environment.getExternalStorageDirectory()+"/Android/data/com.zacharia.app/", "fxml.xml");
            if(xmlfile.exists()){
                xmlfile.delete();
            }
            try{
                xmlfile=new File(Environment.getExternalStorageDirectory()+"/Android/data/com.zacharia.app/", "fxml.xml");
            HttpResponse response=client.execute(request);
            InputStream content = response.getEntity().getContent();           
            FileOutputStream output = new FileOutputStream(xmlfile);
           
            int bufferSize = 1024;
            byte[] buffer = new byte[bufferSize];
            int len = 0;
            while ((len = content.read(buffer)) != -1) {
                output.write(buffer, 0, len);
            }
            content.close();
            output.close();


       
        try {
           
            InputStream is=    new FileInputStream(xmlfile);
            FamilyHandler handler=new FamilyHandler(context);
            SAXParser parser=SAXParserFactory.newInstance().newSAXParser();
            parser.parse(is, handler);
            return "success";
        } catch (SAXException e) {
            e.printStackTrace();
            // TODO: handle exception
            return "Unknown xml";
        }
        catch (Exception e) {
            e.printStackTrace();
            Log.i("zacharia", "Inside generate xml class exe : "+e);
            return "failed";
        }

Wednesday, July 9, 2014

Eclipse keys

Format code and xml file structure using "ctrl + shift + F" everywhere so that the code remains consistent and easy to understand. Also correct indentation of the implemented code using "ctrl + I".

Monday, June 23, 2014

How to build NDK projects automatically in ECLIPSE

When editing native JNI code in an Android project using the Android NDK you may configure Eclipse to automatically rebuild your project when editing native code, just as it does for java. The below steps shows how to perform the necessary configuration (note that this requires revision 4 or later of the NDK - previous revisions does not contain the necessary ndk-build binary):
Start by right clicking on your android project (named hello-neon in the below screenshots) with JNI resources, and select Properties. In the resulting dialog, choose the Builders entry in the list to the left and press the New...button:

A new dialog will open presenting a list of builder types. Select the Program type and press the OK button:

In the Main tab, fill in the following:
Name:
NDK Builder
Location:
/opt/android-ndk/ndk-build (or wherever your ndk-build binary is). You may use a variable as in ${system_property:user.home}/lib/android-ndk/ndk-build
Working Directory:
${workspace_loc:/hello-neon} (replace hello-neon with your project name. Press the Browse Workspace... button to select it graphically)
The result should look something like the below:

Now continue with the refresh tab. Make sure the two checkboxes Refresh resources upon completion. and Recursively include sub-folders are checked. Choose the Specific resources radio button and press the Specify Resources...button:

Since the ndk-build process will generate files in the lib folder, we want Eclipse to discover changes made there without having to refresh manually. So select the lib folder in the project (create one if necessary) and press theFinish button:

Now skip the Environment tab and go to the final Build Options tab. Make sure the Run the builder: During auto buildscheckbox is checked.

Since the NDK build only needs to happen when editing files in the jni folder, check that folder and press theFinish button.

Now finally press OK in the builder configuration dialog - the new NDK builder should now be up and running. Try editing any file in the jni folder and check that the Console view produces output from the build process:





Source: http://mobilepearls.com/labs/ndk-builder-in-eclipse/

Thursday, June 12, 2014

Get resource id from name in Android

public static int getResId(String variableName, Class<?> c) {

        try {
            Field idField = c.getDeclaredField(variableName);
            return idField.getInt(idField);
        } catch (Exception e) {
            e.printStackTrace();
            return -1;
        }
    }



getResId(disobj.getName(), R.drawable.class);

Monday, June 9, 2014

Get accounts details in Android


Permission:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Code:
AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();

for (Account ac : accounts) {
    String acname = ac.name;
    String actype = ac.type;
    // Take your time to look at all available accounts
    System.out.println("Accounts : " + acname + ", " + actype);
}
Check actype for whatsapp account
if(actype.equals("com.whatsapp")){
    String phoneNumber = ac.name;
}

Tuesday, April 29, 2014

To read the exception

 private String getStackTrace(Exception e) {
       
Writer writer = new StringWriter();
PrintWriter printWriter = new PrintWriter(writer);
e.printStackTrace(printWriter);
String s = writer.toString();
return s; 
    }

To enable all links clickable

Linkify.addLinks(message, Linkify.ALL)

Monday, January 6, 2014

ActionBar Tutorial

Source :here

Enabling Split Action Bars

Split action bar provides a separate bar at the bottom of the screen. This option will be useful when you want to display the action items at the bottom of the screen by leaving some space on the title bar.
To enable split action bar add uiOptions=”splitActionBarWhenNarrow” to all the <activity> tags or to the <application> tag directly in AndroidManifest.xml file. Also we need to add <meta-data> with the value android.support.UI_OPTIONS to support older version below API level 14.
<!-- Location found activity -->
<activity
    android:name="info.androidhive.actionbar.LocationFound"
    android:label="@string/activity_location_found"
    android:parentActivityName="info.androidhive.actionbar.MainActivity" >
    <!-- To support below API Level 14 -->
    <meta-data android:name="android.support.UI_OPTIONS"
           android:value="splitActionBarWhenNarrow" />
</activity>

Wednesday, January 1, 2014

CircleScrollListView

public class CircleScrollListView extends SurfaceView implements
    SurfaceHolder.Callback, OnGestureListener {
private GestureDetector mGestureDetector;
private Thread mThread;
private ArrayList<CircleDrawItem> datas = new ArrayList<CircleDrawItem>();
int[] playerDrawableResourceIds = new int[] { R.drawable.ronaldo,
        R.drawable.zindance, R.drawable.congvinh, R.drawable.huynhduc,
        R.drawable.gerrard, R.drawable.nagatomo, R.drawable.messi,
        R.drawable.minhphuong, R.drawable.neymar, R.drawable.ronaldo_beo,
        R.drawable.ronaldinho, R.drawable.xavi };
public int mCenterX;
public int mCenterY;
public int mRadius;
public double mStartAngleInRadian = Math.PI / 4;
private boolean isStop = false;

public CircleScrollListView(Context context, AttributeSet attrs) {
    super(context, attrs);
    mGestureDetector = new GestureDetector(context, this);
    getHolder().addCallback(this);
    this.setFocusable(true);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    mGestureDetector.onTouchEvent(event);
    return true;
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
        int height) {
}

public static int calculateInSampleSize(BitmapFactory.Options options,
        int reqWidth, int reqHeight) {
    // Raw height and width of image
    final int height = options.outHeight;
    final int width = options.outWidth;
    int inSampleSize = 1;

    if (height > reqHeight || width > reqWidth) {

        // Calculate ratios of height and width to requested height and
        // width
        final int heightRatio = Math.round((float) height
                / (float) reqHeight);
        final int widthRatio = Math.round((float) width / (float) reqWidth);

        // Choose the smallest ratio as inSampleSize value, this will
        // guarantee
        // a final image with both dimensions larger than or equal to the
        // requested height and width.
        inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
    }

    return inSampleSize;
}

public static Bitmap decodeSampledBitmapFromResource(Resources res,
        int resId, int reqWidth, int reqHeight) {

    // First decode with inJustDecodeBounds=true to check dimensions
    final BitmapFactory.Options options = new BitmapFactory.Options();
    options.inJustDecodeBounds = true;
    BitmapFactory.decodeResource(res, resId, options);

    // Calculate inSampleSize
    options.inSampleSize = calculateInSampleSize(options, reqWidth,
            reqHeight);

    // Decode bitmap with inSampleSize set
    options.inJustDecodeBounds = false;
    return BitmapFactory.decodeResource(res, resId, options);
}

private double calculateScrollAngle(float px1, float py1, float px2,
        float py2) {
    double radian1 = Math.atan2(py1, px1);
    double radian2 = Math.atan2(py2, px2);
    double diff = radian2 - radian1;
    return diff;
}

@Override
public void surfaceCreated(SurfaceHolder holder) {

    setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
            LayoutParams.MATCH_PARENT));

    Global.density = getResources().getDisplayMetrics().density;
    Global.dw = getResources().getDisplayMetrics().widthPixels;
    Global.dh = getResources().getDisplayMetrics().heightPixels;
    Global.dp = Global.density / 1.5f;

    // For circle data
    mCenterX = (int) (Global.dw / 2.0f);
    mCenterY = (int) (Global.dh);
//      mCenterX = (int) (Global.dp * 200);
//      mCenterY = (int) (Global.dh / 2.0f);
    mRadius = (int) (300 * Global.dp);
    mStartAngleInRadian = Math.PI / 4;

    for (int i = 0; i < playerDrawableResourceIds.length; i++) {
        CircleDrawItem circleDrawItem = new CircleDrawItem();
        circleDrawItem.mIconBitmap = decodeSampledBitmapFromResource(
                getResources(), playerDrawableResourceIds[i], 50, 50);
        circleDrawItem.mAngle = mStartAngleInRadian +i * Math.PI / 10;
        datas.add(circleDrawItem);
    }

    mThread = new Thread(new Runnable() {
        @Override
        public void run() {
            while (!isStop) {
                draw();
            }
        }
    });

    mThread.start();
}

protected void draw() {
    Canvas canvas = getHolder().lockCanvas();
    if (canvas == null) {
        return;
    }
    canvas.save();
    canvas.drawColor(Color.TRANSPARENT, Mode.CLEAR);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setFilterBitmap(true);
    paint.setAntiAlias(true);

    for (int i = 0; i < datas.size(); i++) {
        canvas.save();
        CircleDrawItem item = datas.get(i);
        double x = mCenterX + Math.cos(item.mAngle) * mRadius;
        double y = mCenterY - Math.sin(item.mAngle) * mRadius;
        canvas.drawBitmap(item.mIconBitmap,
                (int) x - item.mIconBitmap.getWidth() / 2, (int) y
                        - item.mIconBitmap.getHeight() / 2, paint);
        canvas.restore();
    }
    canvas.restore();
    getHolder().unlockCanvasAndPost(canvas);
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) {
    isStop = true;
}

@Override
public boolean onDown(MotionEvent e) {
    return false;
}

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
        float velocityY) {
    return false;
}

@Override
public void onLongPress(MotionEvent e) {

}

@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
        float distanceY) {
    float tpx = e1.getY();
    float tpy = e2.getX();
    float disx = (int) distanceY;
    float disy = (int) distanceX;
    double scrollAngle = calculateScrollAngle(tpx, tpy, tpx + disx, tpy
            + disy);
    for (int i = 0; i < datas.size(); i++) {
        datas.get(i).mAngle += scrollAngle;
    }
    return true;
}

@Override
public void onShowPress(MotionEvent e) {
}

@Override
public boolean onSingleTapUp(MotionEvent e) {
    return false;
}
}
 
source: http://stackoverflow.com/questions/18822465/how-to-put-an-onclick-event-for-the-item-coming-at-the-center-of-the-canvas-in-a 

Note: not checked