Friday 14 June 2013

Android: Toast After Certain Time uisng AlarmManager

 MainActivity.java

public class MainActivity extends Activity implements OnClickListener {

    final static private long ONE_SECOND = 1000;
    final static private long TWENTY_SECONDS = ONE_SECOND * 20;
    PendingIntent pi;
    BroadcastReceiver br;
    AlarmManager am;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setup();
        findViewById(R.id.the_button).setOnClickListener(this);

    }

    private void setup() {
        br = new BroadcastReceiver() {
            @Override
            public void onReceive(Context c, Intent i) {
                Toast.makeText(c, "Rise and Shine!", Toast.LENGTH_LONG).show();

            }
        };
        registerReceiver(br, new IntentFilter("com.example.scheduleevent"));
        pi = PendingIntent.getBroadcast(this, 0, new Intent(
                "com.example.scheduleevent"), 0);
        am = (AlarmManager) (this.getSystemService(Context.ALARM_SERVICE));
    }

    @Override
    public void onClick(View v) {
        am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() + TWENTY_SECONDS, pi);

    }

    @Override
    protected void onDestroy() {
        am.cancel(pi);
        unregisterReceiver(br);
        super.onDestroy();
    }

}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:layout_gravity="center"
    android:gravity="center">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Alarm Example" />
    <Button
        android:id="@+id/the_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Set"/>
</LinearLayout>










Android: AlarmManager for certain Date


Calendar cur_cal = new GregorianCalendar();
cur_cal.setTimeInMillis(System.currentTimeMillis());//set the current time and date for this calendar

Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_YEAR, cur_cal.get(Calendar.DAY_OF_YEAR));
cal.set(Calendar.HOUR_OF_DAY, 18);
cal.set(Calendar.MINUTE, 32);
cal.set(Calendar.SECOND, cur_cal.get(Calendar.SECOND));
cal.set(Calendar.MILLISECOND, cur_cal.get(Calendar.MILLISECOND));
cal.set(Calendar.DATE, cur_cal.get(Calendar.DATE));
cal.set(Calendar.MONTH, cur_cal.get(Calendar.MONTH));
am.set(AlarmManager.RTC_WAKEUP,
cal.getTimeInMillis(), pendingIntent);

Android: Notification for certain time using AlaramManager


AlarmService.java

public class AlarmService extends Activity {

AlarmManager am;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
setOneTimeAlarm();
}

public void setOneTimeAlarm() {

Intent intent = new Intent(this, AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
intent, PendingIntent.FLAG_ONE_SHOT);
am.set(AlarmManager.RTC_WAKEUP,
System.currentTimeMillis() + (1 * 5000), pendingIntent);
}
//
// public void setRepeatingAlarm() {
// Intent intent = new Intent(this, AlarmReceiver.class);
// PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,
// intent, PendingIntent.FLAG_CANCEL_CURRENT);
// am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(),
// (1 * 1000), pendingIntent);
// }

}

AlarmReceiver.java


public class AlarmReceiver extends BroadcastReceiver {

NotificationManager nm;

@Override
public void onReceive(Context context, Intent intent) {

intent = new Intent(context, AlarmService.class);
nm = (NotificationManager) context
.getSystemService(Context.NOTIFICATION_SERVICE);
CharSequence from = "Title";
CharSequence message = "Description...";
PendingIntent contentIntent = PendingIntent.getActivity(context, 0,
intent, 0);
Notification notif = new Notification(R.drawable.ic_launcher,
"Message...", System.currentTimeMillis());
notif.setLatestEventInfo(context, from, message, contentIntent);
nm.notify(1, notif);
}
}

Manifest


 <receiver
            android:name="com.example.alarmmanager.AlarmReceiver"
            android:process=":remote" >
        </receiver>



Thursday 13 June 2013

android: achartengine BarChart


package com.example.graphtouch;

import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart.Type;
import org.achartengine.model.SeriesSelection;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Color;
import android.graphics.Paint.Align;
import android.view.MotionEvent;
import android.view.View;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MainActivity extends Activity {

GridView gridviewloader;
private String[] xAxisBarDisplayBottomValues;
private int[] xAxisTempPositions;
private int[] barValues;
private GraphicalView mChartView;

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

xAxisBarDisplayBottomValues = new String[] { "Jan", "Feb", "Mar", "Apr" };
xAxisTempPositions = new int[] { 0, 1, 2, 3 };
barValues = new int[] { 20, 60, 27, 90 };

final XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setBarWidth(60);
multiRenderer.setXLabels(0);// set X- Interval
multiRenderer.setYLabels(5);// set Y- Interval
multiRenderer.setInScroll(true);
multiRenderer.setShowAxes(true);
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setBackgroundColor(Color.WHITE);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setChartTitle("Income vs Expense Chart");
multiRenderer.setYTitle("% to Total Listings");
multiRenderer.setZoomButtonsVisible(false);
multiRenderer.setXLabelsColor(Color.BLACK);
multiRenderer.setYLabelsColor(0, Color.BLACK);
multiRenderer.setAxesColor(Color.parseColor("#949494"));
multiRenderer.setLabelsColor(Color.BLACK);
multiRenderer.setShowGrid(true);
multiRenderer.setYAxisMin(0);
multiRenderer.setYAxisMax(100);
multiRenderer.setXAxisMin(-0.5);
multiRenderer.setXAxisMax(3.5);
// multiRenderer.setBarSpacing(0.0);
multiRenderer.setFitLegend(true);
multiRenderer.setShowLegend(false);
multiRenderer.setZoomEnabled(true, false);
multiRenderer.setPanEnabled(true, false);
multiRenderer.setYLabelsAlign(Align.RIGHT);
multiRenderer.setMargins(new int[] { 45, 45, 45, 45 });
multiRenderer.setClickEnabled(true);

for (int i = 0; i < barValues.length; i++) {
XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
incomeRenderer.setColor(Color.BLACK);
// to give the gradient color to the bars.
incomeRenderer.setFillPoints(true);
incomeRenderer.setLineWidth(2);
incomeRenderer.setGradientEnabled(true);
incomeRenderer.setGradientStart(0, Color.rgb(165, 192, 15));
incomeRenderer.setDisplayChartValues(true);
multiRenderer.addXTextLabel(xAxisTempPositions[i],
xAxisBarDisplayBottomValues[i]);
multiRenderer.addSeriesRenderer(incomeRenderer);
}

XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();

for (int i = 0; i < barValues.length; i++) {
XYSeries incomeSeries1 = new XYSeries("Income1");
incomeSeries1.add(xAxisTempPositions[i], barValues[i]);
dataset.addSeries(incomeSeries1);
}

LinearLayout rl = (LinearLayout) findViewById(R.id.icon_image);
mChartView = ChartFactory.getBarChartView(this, dataset, multiRenderer,
Type.STACKED);
rl.addView(mChartView);

}

}





Android: Send email in android using JavaMail API with smtp but without SSL

Add Jars

1)activation.jar
2)additionnal.jar
3)mail.jar

Mail.java


public class Mail extends javax.mail.Authenticator {
private String _user;
private String _pass;

private String[] _to;
private String _from;

private String _port;
private String _sport;

private String _host;

private String _subject;
private String _body;

private boolean _auth;

private boolean _debuggable;

private Multipart _multipart;

public Mail() {
_host = "smtp.gmail.com"; // default smtp server
_port = "465"; // default smtp port
_sport = "465"; // default socketfactory port

_user = ""; // username
_pass = ""; // password
_from = ""; // email sent from
_subject = ""; // email subject
_body = ""; // email body

_debuggable = false; // debug mode on or off - default off
_auth = true; // smtp authentication - default on

_multipart = new MimeMultipart();

// There is something wrong with MailCap, javamail can not find a
// handler for the multipart/mixed part, so this bit needs to be added.
MailcapCommandMap mc = (MailcapCommandMap) CommandMap
.getDefaultCommandMap();
mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
CommandMap.setDefaultCommandMap(mc);
}

public Mail(String user, String pass) {
this();

_user = user;
_pass = pass;
}

public boolean send() throws Exception {
Properties props = _setProperties();

if (!_user.equals("") && !_pass.equals("") && _to.length > 0
&& !_from.equals("") && !_subject.equals("")
&& !_body.equals("")) {

Session session = Session.getInstance(props, this);
DataHandler handler = new DataHandler(new ByteArrayDataSource(
_body.getBytes(), "text/plain"));
MimeMessage msg = new MimeMessage(session);

msg.setFrom(new InternetAddress(_from));
msg.setDataHandler(handler);
InternetAddress[] addressTo = new InternetAddress[_to.length];
for (int i = 0; i < _to.length; i++) {
addressTo[i] = new InternetAddress(_to[i]);
}
msg.setRecipients(MimeMessage.RecipientType.TO, addressTo);

msg.setSubject(_subject);
msg.setSentDate(new Date());

// setup message body
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(_body);
_multipart.addBodyPart(messageBodyPart);

// Put parts in message
msg.setContent(_multipart);

// send email
Transport.send(msg);
Log.v("mas", "Email was  send");
return true;
} else {
Log.v("mas", "Email was  not send");
return false;

}
}

public class ByteArrayDataSource implements DataSource {
private byte[] data;
private String type;

public ByteArrayDataSource(byte[] data, String type) {
super();
this.data = data;
this.type = type;
}

public ByteArrayDataSource(byte[] data) {
super();
this.data = data;
}

public void setType(String type) {
this.type = type;
}

public String getContentType() {
if (type == null)
return "application/octet-stream";
else
return type;
}

public InputStream getInputStream() throws IOException {
return new ByteArrayInputStream(data);
}

public String getName() {
return "ByteArrayDataSource";
}

public OutputStream getOutputStream() throws IOException {
throw new IOException("Not Supported");
}
}

@Override
public PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(_user, _pass);
}

private Properties _setProperties() {
Properties props = new Properties();

props.put("mail.smtp.host", _host);

if (_debuggable) {
props.put("mail.debug", "true");
}

if (_auth) {
props.put("mail.smtp.auth", "true");
}

props.put("mail.smtp.port", _port);
props.put("mail.smtp.socketFactory.port", _sport);
props.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");

return props;
}

// the getters and setters
public String getBody() {
return _body;
}

public void setBody(String _body) {
this._body = _body;
}

public void setTo(String[] toArr) {
// TODO Auto-generated method stub
this._to = toArr;
}

public void setFrom(String string) {
// TODO Auto-generated method stub
this._from = string;
}

public void setSubject(String string) {
// TODO Auto-generated method stub
this._subject = string;
}

// more of the getters and setters …..
}



in Acitivity


Mail m = new Mail("abc@gmail.com", "XXXXXX");

String[] toArr = { "vd@gmail.com",
"vs@vsplash.net" };
m.setTo(toArr);
m.setFrom("abc");
m.setSubject("Subject");
m.setBody("Message body...");

try {
boolean i = m.send();
if (i == true) {
Toast.makeText(getApplicationContext(), "Email was sent successfully ", Toast.LENGTH_SHORT)
.show();

} else {
Toast.makeText(getApplicationContext(), "Email was not sent successfully ",
Toast.LENGTH_SHORT).show();

}

} catch (Exception e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}

Friday 7 June 2013

Android: achartengine bar chart.



 mMonth = new String[] { "Jan", "Feb", "Mar", "Apr", "May",
"Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };



LayoutInflater li = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = li.inflate(R.layout.grid_item, null);

LinearLayout rl = (LinearLayout) v.findViewById(R.id.icon_image);

int[] x = { 0, 1, 2, 3, 4, 5, 6, 7 };
int[] income = { 2000, 2500, 2700, 3000, 2800, 3500, 3700, 3800 };

XYSeries incomeSeries = new XYSeries("Income");
// Creating an XYSeries for Income

// Adding data to Income Series
for (int i = 0; i < x.length; i++) {
incomeSeries.add(i, income[i]);

}

// Creating a dataset to hold each series
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
// Adding Income Series to the dataset
dataset.addSeries(incomeSeries);
// Adding Expense Series to dataset

// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
incomeRenderer.setColor(Color.rgb(130, 130, 230));
incomeRenderer.setFillPoints(true);
incomeRenderer.setLineWidth(2);
incomeRenderer.setDisplayChartValues(true);

// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
multiRenderer.setInScroll(true);
multiRenderer.setShowAxes(false);
multiRenderer.setApplyBackgroundColor(true);
multiRenderer.setBackgroundColor(Color.WHITE);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setChartTitle("Income vs Expense Chart");
multiRenderer.setXTitle("Year 2012");
multiRenderer.setYTitle("Amount in Dollars");
multiRenderer.setZoomButtonsVisible(false);
multiRenderer.setXLabelsColor(Color.BLACK);
multiRenderer.setYLabelsColor(0, Color.BLACK);
multiRenderer.setAxesColor(Color.BLACK);
multiRenderer.setLabelsColor(Color.BLACK);

// for bar spacing
multiRenderer.setBarSpacing(1.0);

for (int i = 0; i < x.length; i++) {
multiRenderer.addXTextLabel(i, months[i]);
}

multiRenderer.addSeriesRenderer(incomeRenderer);

mChartView = ChartFactory.getBarChartView(context, dataset,
multiRenderer, null);
rl.addView(mChartView);