How can I run code when my application is installed/upgraded?

by Josh » Thu, 16 Apr 2009 07:53:04 GMT


Sponsored Links
 I have an application which has notifications that disappear when the
application is closed to be reinstalled or upgraded.

How can I have my application either run code when it is first
installed or have it detect the first time it is run?

--~--~---------~--~----~------------~-------~--~----~



How can I run code when my application is installed/upgraded?

by Justin (Google Employee) » Thu, 16 Apr 2009 08:37:31 GMT


 Simply write data to the disk, perhaps the version number of the last
time the application ran. Then check this number at startup.

Cheers,
Justin
Android Team @ Google



--~--~---------~--~----~------------~-------~--~----~


Sponsored Links


Other Threads

1. help needed in integration of facebook api with android [plz answe my confusion in the sample code given]

Hello experts !
I am trying hard for many days to implement authentication facility in
my app by facebuk login id. I tried with fbconnect api but it wasnt
working. I got this code and tried . It works fine on version 1.6 and
connects to my facebook application. But i just need to ensure if
login is successful then it should return to my local app activity.

if it feels odd understanding the code then here is the link ...

http://forum.developers.facebook.com/viewtopic.php?pid=146956

I am still a beginner and takes a little while to understand code :S
up to my understanding there is a class fConnect created by author
which make http posts requests to facebook api.

Confusions:
1) why is xd_receiver link is required ? its imp to understand because
its used in the onPagestarted() function in facebookwebview client
class in Connection.java. There is an if condition for
page.getPath().equals("/connect/xd_receiver.htm" & when its true a
session is created and Intent is called for the intended activity in
the application. Thats what i want to do.

Problem:
there is no getsetting() function implemented in the FConnect class :S
if the author has done it i might have been able to run it correctly.
Kindly guide me about working of this function so that i can implement
it myself.

Creating a User Class
Code:

public class User {
    public    String uid;
    public    String name;
    public    String picUrl;
}

Of course you can add some fields here, but I didn't have any use of
the others.

2) Creating the WebView
facebook_connect.xml
Code:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:scrollbars="none">
<WebView
    android:id="@+id/facebookview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>
</ScrollView>

Connection.java
Code:

public class Connection extends Activity {
    FConnect    fConnect;

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

        Toast.makeText(getBaseContext(), R.string.allow_facebook,
Toast.LENGTH_LONG).show();
        WebView    webview;
        webview = (WebView) findViewById(R.id.facebookview);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebViewClient(new FacebookWebViewClient());
        fConnect = new FConnect(this);
        webview.loadUrl("http://www.connect.facebook.com/login.php?
return_session=1&nochrome=1&fbconnect=1&extern=2&connect_display=popup&api_key="+FConnect.API_KEY
+"&v=1.0&next="+FConnect.XD_RECEIVER+"%3Ffb_login%26fname
%3D_opener&cancel_url="+FConnect.XD_RECEIVER+"%23fname%3D_opener
%26%257B%2522t%2522%253A3%252C%2522h%2522%253A%2522fbCancelLogin
%2522%252C%2522sid%2522%253A
%25220.741%2522%257D&channel_url="+FConnect.XD_RECEIVER);
    }

    private class FacebookWebViewClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap
favicon) {
            super.onPageStarted(view, url, favicon);

            try {
                String    subUrl = URLDecoder.decode(url).trim();
                URL        page = new URL(subUrl);
                if (page.getPath().equals("/connect/xd_receiver.htm"))
                {
                    subUrl = subUrl.substring(subUrl.indexOf("{") + 1,
subUrl.indexOf("}"));
                    fConnect.createSession(subUrl);
                    List<User> user =
fConnect.getUserInfo(fConnect.getSetting("uid"));
                    Toast.makeText(getBaseContext(), "Welcome,
"+user.get(0).name+", you're now connected !",
Toast.LENGTH_LONG).show();
                    Intent    intent = new Intent(getBaseContext(),
Base.class); //The next Activity to call
                    startActivity(intent);
                    finish();
                }
            } catch (Exception e) {
                Toast.makeText(getBaseContext(), R.string.url_parsing,
Toast.LENGTH_LONG).show();
            }
        }
    }
}

3) Creating a FConnect Class
Code:

public class FConnect {
    static public    final String    SECRET = "your secret key";
    static public    final String    API_KEY = "your api key";
    static public    final String    XD_RECEIVER = "http:// link to
your xd receiver.htm file";

    private        final String    v = "1.0";
    private        final String    format = "JSON";
    private        final String    server = "http://api.facebook.com/
restserver.php";

    static public    final String    PREF_NAME = "Your application
name";
    static public    final String[]    PREF_VALUES = {"session_key",
"uid", "expires", "secret", "sig"};

    private        SharedPreferences    settings;
    Context         ctx;

    public FConnect(Context context) {
        ctx = context;
        settings = context.getSharedPreferences(PREF_NAME, 0);
    }

    //Getting the GET information after logging-in Facebook Connect
    //Creating session_key, uid, expires, secret, sig on the shared
parameters
    public void    createSession(String query) throws
ClientProtocolException
    {
        String[]            subQuery = query.split(",");

        SharedPreferences.Editor editor = settings.edit();

        if (subQuery.length != 5)
            throw new ClientProtocolException("Cannot generate
session, only "+subQuery.length+" values");
        for (int i = 0; i < subQuery.length; i++)
        {
            String[]    values    = subQuery[i].split(":");
            for (int j = 0; j < 2; j++)
            {
                values[j] = values[j].replace('"', ' ');
                values[j] = values[j].trim();
            }
            editor.putString(values[0], values[1]);
        }
        editor.commit();
    }

    //Login off the user
    public void    killSession()
    {
        SharedPreferences.Editor editor = settings.edit();
        for (int i = 0; i < PREF_VALUES.length; i++)
            editor.remove(PREF_VALUES[i]);
        editor.commit();
    }

    //Does the Session's still valid?
    public boolean isSession() throws ClientProtocolException,
IOException,
    NoSuchAlgorithmException {
        if (getSetting("session_key") != "")
        {
            StringBuilder params = new StringBuilder();
            params.append("api_key=" + API_KEY);
            params.append("&call_id=" + System.currentTimeMillis());
            params.append("&format=" + format);
            params.append("&method=Users.isAppUser");
            params.append("&session_key=" +
getSetting("session_key"));
            params.append("&v=" + v);
            params.append("&sig=" + getSig(params, SECRET));

            String result = postRequest(params.toString());
            return Boolean.parseBoolean(result);
        }
        return (false);
    }

    //Get the uids
    //Return a list of users's informations, usable with
users.get(#).picUrl for example
    public List<User> getUserInfo(String uids)
    throws ClientProtocolException, IOException,
NoSuchAlgorithmException, JSONException {
        String fields = "name, pic";
        StringBuilder params = new StringBuilder();
        params.append("api_key=" + API_KEY);
        params.append("&call_id=" + System.currentTimeMillis());
        params.append("&fields=" + fields);
        params.append("&format=" + format);
        params.append("&method=Users.getInfo");
        params.append("&session_key=" + getSetting("session_key"));
        params.append("&uids=" + uids);
        params.append("&v=" + v);
        params.append("&sig=" + getSig(params, SECRET));

        String result = postRequest(params.toString());
        JSONArray users = new JSONArray(result);

        List<User> r = new ArrayList<User>();
        for (int i = 0; i < users.length(); i++) {
            JSONObject u = users.getJSONObject(i);
            User user = new User();
            user.name = u.getString("name");
            user.picUrl = u.getString("pic");
            r.add(user);
        }
        return r;
    }

    private String getSig(StringBuilder params, String s)
    throws NoSuchAlgorithmException, UnsupportedEncodingException {
        return SimpleMD5.MD5(params.toString().replaceAll("&", "") +
s);
    }

    private String postRequest(String params) throws
ClientProtocolException,
    IOException {
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(server);
        post.setHeader(HTTP.CONTENT_TYPE, "application/x-www-form-
urlencoded");
        post.setEntity(new StringEntity(params));
        HttpResponse response = client.execute(post);
        if (response.getStatusLine().getStatusCode() == 200) {
            return EntityUtils.toString(response.getEntity());
        }
        throw new
IOException(response.getStatusLine().getReasonPhrase());
    }
}

4) Creating a SimpleMD5 Class
Code:

public class SimpleMD5 {
    static String convertToHex(byte[] data) {
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < data.length; i++) {
            int halfbyte = (data[i] >>> 4) & 0x0F;
            int two_halfs = 0;
            do {
                if ((0 <= halfbyte) && (halfbyte <= 9))
                    buf.append((char) ('0' + halfbyte));
                else
                    buf.append((char) ('a' + (halfbyte - 10)));
                halfbyte = data[i] & 0x0F;
            } while (two_halfs++ < 1);
        }
        return buf.toString();
    }

    public static String MD5(String text) throws
NoSuchAlgorithmException,
            UnsupportedEncodingException {
        MessageDigest md;
        md = MessageDigest.getInstance("MD5");
        byte[] md5hash = new byte[32];
        md.update(text.getBytes("iso-8859-1"), 0, text.length());
        md5hash = md.digest();
        return convertToHex(md5hash);
    }
}


thanks in advance ...

regards,
wahib

-- 

2. Kindly help me understanding the sample code used for integration of facebook api with android

Hello experts !
I am trying hard for many days to implement authentication facility in
my app by facebuk login id. I tried with fbconnect api but it wasnt
working. I got this code and tried . It works fine on version 1.6 and
connects to my facebook application. But i just need to ensure if
login is successful then it should return to my local app activity.

if it feels odd understanding the code then here is the link ...

http://forum.developers.facebook.com/viewtopic.php?pid=146956

I am still a beginner and takes a little while to understand code :S
up to my understanding there is a class fConnect created by author
which make http posts requests to facebook api.

Confusions:
1) why is xd_receiver link is required ? its imp to understand because
its used in the onPagestarted() function in facebookwebview client
class in Connection.java. There is an if condition for
page.getPath().equals("/connect/xd_receiver.htm" & when its true a
session is created and Intent is called for the intended activity in
the application. Thats what i want to do.

Problem:
there is no getsetting() function implemented in the FConnect class :S
if the author has done it i might have been able to run it correctly.
Kindly guide me about working of this function so that i can implement
it myself.

Creating a User Class
Code:

public class User {
    public    String uid;
    public    String name;
    public    String picUrl;
}

Of course you can add some fields here, but I didn't have any use of
the others.

2) Creating the WebView
facebook_connect.xml
Code:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#ffffff"
    android:scrollbars="none">
<WebView
    android:id="@+id/facebookview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
/>
</ScrollView>

Connection.java
Code:

public class Connection extends Activity {
    FConnect    fConnect;

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

        Toast.makeText(getBaseContext(), R.string.allow_facebook,
Toast.LENGTH_LONG).show();
        WebView    webview;
        webview = (WebView) findViewById(R.id.facebookview);
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebViewClient(new FacebookWebViewClient());
        fConnect = new FConnect(this);
        webview.loadUrl("http://www.connect.facebook.com/login.php?
return_session=1&nochrome=1&fbconnect=1&extern=2&connect_display=popup&api_key="+FConnect.API_KEY
+"&v=1.0&next="+FConnect.XD_RECEIVER+"%3Ffb_login%26fname
%3D_opener&cancel_url="+FConnect.XD_RECEIVER+"%23fname%3D_opener
%26%257B%2522t%2522%253A3%252C%2522h%2522%253A%2522fbCancelLogin
%2522%252C%2522sid%2522%253A
%25220.741%2522%257D&channel_url="+FConnect.XD_RECEIVER);
    }

    private class FacebookWebViewClient extends WebViewClient {
        @Override
        public void onPageStarted(WebView view, String url, Bitmap
favicon) {
            super.onPageStarted(view, url, favicon);

            try {
                String    subUrl = URLDecoder.decode(url).trim();
                URL        page = new URL(subUrl);
                if (page.getPath().equals("/connect/xd_receiver.htm"))
                {
                    subUrl = subUrl.substring(subUrl.indexOf("{") + 1,
subUrl.indexOf("}"));
                    fConnect.createSession(subUrl);
                    List<User> user =
fConnect.getUserInfo(fConnect.getSetting("uid"));
                    Toast.makeText(getBaseContext(), "Welcome,
"+user.get(0).name+", you're now connected !",
Toast.LENGTH_LONG).show();
                    Intent    intent = new Intent(getBaseContext(),
Base.class); //The next Activity to call
                    startActivity(intent);
                    finish();
                }
            } catch (Exception e) {
                Toast.makeText(getBaseContext(), R.string.url_parsing,
Toast.LENGTH_LONG).show();
            }
        }
    }
}

3) Creating a FConnect Class
Code:

public class FConnect {
    static public    final String    SECRET = "your secret key";
    static public    final String    API_KEY = "your api key";
    static public    final String    XD_RECEIVER = "http:// link to
your xd receiver.htm file";

    private        final String    v = "1.0";
    private        final String    format = "JSON";
    private        final String    server = "http://api.facebook.com/
restserver.php";

    static public    final String    PREF_NAME = "Your application
name";
    static public    final String[]    PREF_VALUES = {"session_key",
"uid", "expires", "secret", "sig"};

    private        SharedPreferences    settings;
    Context         ctx;

    public FConnect(Context context) {
        ctx = context;
        settings = context.getSharedPreferences(PREF_NAME, 0);
    }

    //Getting the GET information after logging-in Facebook Connect
    //Creating session_key, uid, expires, secret, sig on the shared
parameters
    public void    createSession(String query) throws
ClientProtocolException
    {
        String[]            subQuery = query.split(",");

        SharedPreferences.Editor editor = settings.edit();

        if (subQuery.length != 5)
            throw new ClientProtocolException("Cannot generate
session, only "+subQuery.length+" values");
        for (int i = 0; i < subQuery.length; i++)
        {
            String[]    values    = subQuery[i].split(":");
            for (int j = 0; j < 2; j++)
            {
                values[j] = values[j].replace('"', ' ');
                values[j] = values[j].trim();
            }
            editor.putString(values[0], values[1]);
        }
        editor.commit();
    }

    //Login off the user
    public void    killSession()
    {
        SharedPreferences.Editor editor = settings.edit();
        for (int i = 0; i < PREF_VALUES.length; i++)
            editor.remove(PREF_VALUES[i]);
        editor.commit();
    }

    //Does the Session's still valid?
    public boolean isSession() throws ClientProtocolException,
IOException,
    NoSuchAlgorithmException {
        if (getSetting("session_key") != "")
        {
            StringBuilder params = new StringBuilder();
            params.append("api_key=" + API_KEY);
            params.append("&call_id=" + System.currentTimeMillis());
            params.append("&format=" + format);
            params.append("&method=Users.isAppUser");
            params.append("&session_key=" +
getSetting("session_key"));
            params.append("&v=" + v);
            params.append("&sig=" + getSig(params, SECRET));

            String result = postRequest(params.toString());
            return Boolean.parseBoolean(result);
        }
        return (false);
    }

    //Get the uids
    //Return a list of users's informations, usable with
users.get(#).picUrl for example
    public List<User> getUserInfo(String uids)
    throws ClientProtocolException, IOException,
NoSuchAlgorithmException, JSONException {
        String fields = "name, pic";
        StringBuilder params = new StringBuilder();
        params.append("api_key=" + API_KEY);
        params.append("&call_id=" + System.currentTimeMillis());
        params.append("&fields=" + fields);
        params.append("&format=" + format);
        params.append("&method=Users.getInfo");
        params.append("&session_key=" + getSetting("session_key"));
        params.append("&uids=" + uids);
        params.append("&v=" + v);
        params.append("&sig=" + getSig(params, SECRET));

        String result = postRequest(params.toString());
        JSONArray users = new JSONArray(result);

        List<User> r = new ArrayList<User>();
        for (int i = 0; i < users.length(); i++) {
            JSONObject u = users.getJSONObject(i);
            User user = new User();
            user.name = u.getString("name");
            user.picUrl = u.getString("pic");
            r.add(user);
        }
        return r;
    }

    private String getSig(StringBuilder params, String s)
    throws NoSuchAlgorithmException, UnsupportedEncodingException {
        return SimpleMD5.MD5(params.toString().replaceAll("&", "") +
s);
    }

    private String postRequest(String params) throws
ClientProtocolException,
    IOException {
        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(server);
        post.setHeader(HTTP.CONTENT_TYPE, "application/x-www-form-
urlencoded");
        post.setEntity(new StringEntity(params));
        HttpResponse response = client.execute(post);
        if (response.getStatusLine().getStatusCode() == 200) {
            return EntityUtils.toString(response.getEntity());
        }
        throw new
IOException(response.getStatusLine().getReasonPhrase());
    }
}

4) Creating a SimpleMD5 Class
Code:

public class SimpleMD5 {
    static String convertToHex(byte[] data) {
        StringBuffer buf = new StringBuffer();
        for (int i = 0; i < data.length; i++) {
            int halfbyte = (data[i] >>> 4) & 0x0F;
            int two_halfs = 0;
            do {
                if ((0 <= halfbyte) && (halfbyte <= 9))
                    buf.append((char) ('0' + halfbyte));
                else
                    buf.append((char) ('a' + (halfbyte - 10)));
                halfbyte = data[i] & 0x0F;
            } while (two_halfs++ < 1);
        }
        return buf.toString();
    }

    public static String MD5(String text) throws
NoSuchAlgorithmException,
            UnsupportedEncodingException {
        MessageDigest md;
        md = MessageDigest.getInstance("MD5");
        byte[] md5hash = new byte[32];
        md.update(text.getBytes("iso-8859-1"), 0, text.length());
        md5hash = md.digest();
        return convertToHex(md5hash);
    }
}


thanks in advance ...

regards,
wahib

-- 

3. SMS number

4. OOT paging Timmy Gunawan

5. Nggak bisa masuk download mode samsung galaxy spica

6. Nggak bisa masuk download mode samsung galaxy spica

7. Different Notification for Text Message and Email