Android, Developpement
Android download de fichier
Télécharger un fichier à partir d’une URL, on vérifie via MD5 que le fichier téléchargé est bien similaire à celui du départ (sinon on utilise celui en local du dossier « raw »: xmlfile.xml): public boolean downloadFile(final String path) { try { URL url = new URL(path); //On récupère le MD5 du fichier à télécharger pour le comaprer au fichier qui va être /// téléchargé juste après String md5online = new String(Hex.encodeHex(DigestUtils.md5(path))); Log.d(« MD5ONLINE », md5online); URLConnection ucon = url.openConnection(); ucon.setReadTimeout(5000); ucon.setConnectTimeout(10000); InputStream is = ucon.getInputStream(); BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5); ///L’emplacement de ce fichier est dans la partie « privée » de l’application Android File file = new File(MainActivity.this.getDir(« filesdir », Context.MODE_PRIVATE) + « /xmlfile.xml »); ///SI le fichier existait on le supprime if (file.exists()) { file.delete(); System.out.println(« file deleted !!!!!!!!!!!!!!!!!! »); } //On crée le fichier file.createNewFile(); ///Et on écrit le résultat du parsing du fichier distant dans un fichier local FileOutputStream outStream = new FileOutputStream(file); byte[] buff = new byte[5 * 1024]; int len; while ((len = inStream.read(buff)) != -1) { outStream.write(buff, 0, len); } outStream.flush(); outStream.close(); inStream.close(); String md5download = new String(Hex.encodeHex(DigestUtils.md5(file.getAbsolutePath()))); Log.d(« MD5DOWN », md5download); ///SI le fichier télécgharger est différents du fichier reçu on utilise le fichier en local /// car il y a eût…
Read MoreAndroid, Developpement
Android empêcher la veille
Tout simplement: getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); Done !
Read MoreAndroid, Developpement
Android récupérer l’adresse IP
On va faire un peu (beaucoup) de formatage de résultat: public String getIpAddr() { WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ip = wifiInfo.getIpAddress(); String ipString = String.format(« %d.%d.%d.%d »,(ip & 0xff), (ip >> 8 & 0xff),(ip >> 16 & 0xff),(ip >> 24 & 0xff)); return ipString; } Done !
Read MoreAndroid, Developpement
Android supprimer un dossier plein de fichiers
Assez simplement: public void DeleteRecursive(File fileOrDirectory) { if (fileOrDirectory.isDirectory()) for (File child : fileOrDirectory.listFiles()) { DeleteRecursive(child); Log.d(« File deleted: « , « »+child.getAbsolutePath()); } fileOrDirectory.delete(); } Done !
Read MoreAndroid, Developpement
Android nombre de jours entre deux dates
Un peu moins simplement :-): public String getDateDiffString(Date dateOne, Date dateTwo) { long timeOne = dateOne.getTime(); long timeTwo = dateTwo.getTime(); long oneDay = 1000 * 60 * 60 * 24; long delta = (timeTwo – timeOne) / oneDay; if (delta > 0) { return « »+delta; } else { delta *= -1; return « »+delta; } } Done !
Read MoreAndroid, Developpement
Android tester si c’est un téléphone ou une tablette
Tout simplement: private boolean hasPhoneAbility() { TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); if(telephonyManager.getPhoneType() == TelephonyManager.PHONE_TYPE_NONE) return false; return true; } Done !
Read MoreAndroid, Developpement
Android tester si il y a une connectivité réseau
Tout simplement: private static boolean isConnected(Context context) { ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = null; if (connectivityManager != null) { networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); } return networkInfo == null ? false : networkInfo.isConnected(); } Done !
Read MoreAndroid, Developpement
Android Dialog Custom Iphone Style
Une première classe « CustomizeDialog »: import android.app.Dialog; import android.content.Context; import android.text.method.ScrollingMovementMethod; import android.view.View; import android.view.View.OnClickListener; import android.view.Window; import android.widget.Button; import android.widget.TextView; public class CustomizeDialog extends Dialog implements OnClickListener { Button okButton; Context mContext; TextView mTitle = null; TextView mMessage = null; View v = null; public CustomizeDialog(Context context) { super(context); mContext = context; /** ‘Window.FEATURE_NO_TITLE’ – Used to hide the mTitle */ requestWindowFeature(Window.FEATURE_NO_TITLE); /** Design the dialog in main.xml file */ setContentView(R.layout.custom_toast); v = getWindow().getDecorView(); v.setBackgroundResource(android.R.color.transparent); mTitle = (TextView) findViewById(R.id.dialogTitle); mMessage = (TextView) findViewById(R.id.dialogMessage); } @Override public void setTitle(CharSequence title) { super.setTitle(title); mTitle.setText(title); } @Override public void setTitle(int titleId) { super.setTitle(titleId); mTitle.setText(mContext.getResources().getString(titleId)); } /** * Set the message text for this dialog’s window. * * @param message * – The new message to display in the title. */ public void setMessage(CharSequence message) { mMessage.setText(message); mMessage.setMovementMethod(ScrollingMovementMethod.getInstance()); } /** * Set the message text for this dialog’s window. The text is retrieved from the resources with the supplied * identifier. * * @param messageId * – the message’s text resource identifier <br> * @see <b>Note : if resourceID wrong application may get crash.</b><br> * Exception has not handle. */ public void setMessage(int messageId) { mMessage.setText(mContext.getResources().getString(messageId)); mMessage.setMovementMethod(ScrollingMovementMethod.getInstance()); } @Override public void onClick(View arg0) {…
Read MoreAndroid, Developpement
Android trouver si une application est installée
Une simple méthode pour voir si une application est installée (via le nom de package x.x.x): public boolean isProAppPresent(Context context){ try { PackageInfo info = context.getPackageManager().getPackageInfo(« my.package.android », PackageManager.GET_META_DATA); Log.d(« TAG », « Pro app is installed: » + info.applicationInfo.name); return context.getPackageManager().checkSignatures(« my.package.android.free », « my.package.android ») == PackageManager.SIGNATURE_MATCH; } catch (NameNotFoundException e) { return false; } } Done !
Read MoreAndroid, Developpement
Envoyer des données en POST avec Android hors du main UI
Voici une méthode pour faire un POST sur une page PHP sans bloquer le main UI Thread: Une AsyncTask: private class insertInAppBillingOnline extends AsyncTask<String, Void, String> { final String URL_STRING = « https://mywebsite.com/myphp.php »; /* => HttpResponse response; @Override protected String doInBackground(String… urls) { SimpleDateFormat sdf = new SimpleDateFormat(« yyyy/MM/dd HH:mm:ss »); String currentDateandTime = sdf.format(new Date()); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); nameValuePairs.add(new BasicNameValuePair(« date », currentDateandTime)); nameValuePairs.add(new BasicNameValuePair(« deviceid », Secure.getString(getContentResolver(), Secure.ANDROID_ID))); HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(URL_STRING); try { httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); response = httpclient.execute(httppost); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onPostExecute(String result) { } } Exécution: insertInAppBillingOnline insert = new insertInAppBillingOnline(); insert.execute(); Et le code PHP qui va récupérer les valeurs POST et insérer le tout dans une BDD: $date = $_POST[‘date’]; $deviceid= $_POST[‘deviceid’]; $db_host= »127.0.0.1″; $db_user= »rootuser »; $db_pass= »password »; $db_name= »name »; $con = mysql_connect($db_host, $db_user, $db_pass) mysql_select_db($db_name, $con); mysql_query(« INSERT INTO mytable(DATE, DEVICEID) VALUES (‘$date’, ‘$deviceid’) »); mysql_close($con); Voilà !
Read MoreAndroid, Developpement
Android AsynTask récupérer valeur de la méthode « onPostExecute() »
Voici l’AsynTask qui retourne un boolean: private class verifyInAppBillingOnline extends AsyncTask<Void, Void, Boolean> { Boolean ispremium = false; private verifyInAppBillingOnlineInterface mListener; public verifyInAppBillingOnline(Context context, verifyInAppBillingOnlineInterface mListener){ this.mListener = mListener; } @Override protected Boolean doInBackground(Void… urls) { return ispremium; } @Override protected void onPostExecute(Boolean result) { result = ispremium; } } On crée une interface qui sera exécutée sur le onPostExecute(): public interface verifyInAppBillingOnlineInterface { public void verifyInAppBillingOnlineResult(boolean result); } Puis on déclare l’AsyncTask et on récupère la méthode de l’interface: verifyInAppBillingOnline task = new verifyInAppBillingOnline(Activity.this,new verifyInAppBillingOnlineInterface() { @Override public void verifyInAppBillingOnlineResult(boolean result) { Log.d(« INAPP result », « »+result); if (result == true) { Log.d(« INAPP result », « OK »); ispremium = result; } else { Log.d(« INAPP result », « KO »); ispremium = result; } } }); task.execute(); Voilà !
Read More