jeudi 22 mai 2014

Programmation Androïd : Obtention des réseaux Wifi connus

    WifiManager myWifiManager = null;


    public void getConfiguredNetworks(){


        try {
            myWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        } catch (Exception e) {
            //log("Exception:" + e.getMessage());
        }

        if ((myWifiManager!=null) && (myWifiManager.isWifiEnabled()==true)){
            log("Getting configured networks...");
            List<WifiConfiguration> lstWifiConfiguration = myWifiManager.getConfiguredNetworks();
            for(int i=0;i<lstWifiConfiguration.size();i++){
                WifiConfiguration wifiConfiguration = lstWifiConfiguration.get(i);
                log("Config" + i + ":SSID="+wifiConfiguration.SSID);
                log("Config" + i + ":   BSSID="+wifiConfiguration.BSSID);
                log("Config" + i + ":   preSharedKey="+wifiConfiguration.preSharedKey);
                String[] strWepKeys = wifiConfiguration.wepKeys;
                for(int j=0;j<strWepKeys.length;j++){
                    log("Config" + i + ":   WepKey" + j + ":" + strWepKeys[j]);
                }
            }
        }
    }

mercredi 21 mai 2014

Nouvelle application Androïd Wififun (Scanner de réseaux WIFI)

Cliquez ici pour télécharger Androïd Wififun 0.2 Beta Release.

Cette version au 31/05/2014 contient en plus une fonction de scan de réseaux wifi dit "additif", c'est-à-dire que chaque nouveau réseau wifi détecté est loggué dans le fichier wififun-scan.log ; Seuls les 5 derniers réseaux wifi détectés sont affichés, et si un réseau est toujours disponible au moment du scan alors une étoile (*) est affichée en face du SSID. Le bouton "Test" contient du code en cours de développement, à savoir l'utilisation du GPS, du réseau WIFI et du réseau télécom pour localiser l'endroit de la détection de chaque antenne par latitude et longitude. L'association entre coordonnées GPS et bornes WIFI détectées n'est pas encore développée.

Cette version au 21/05/2014 permets de scanner les réseaux WIFI (SSID, BSSID, Fréquence, Capacités...) et de logguer les résultats dans un fichier sur /mnt/sdcard/wififun.log

Toutes les fonctions offertes sont :
- Start wifi : Démarrer le wifi et se connecter automatiquement à un réseau connu si possible
- Stop wifi : Arrêter le wifi
- Scan SSIDs : Eventuellement se déconnecter d'un éventuel réseau connu et Scanner les réseaux Wifi environnants
- Get IP : Obtenir l'adresse IP de l'Androïd
- Log to file : Autoriser le log dans un fichier /mnt/sdcard/wififun.log
- Clear log file : Supprimer le fichier de log
- Clear screen : Effacer le log à l'écran
- Test : Fonction beta en cours de développement (Scan de SSID "additif")

La fonction Test en cours de développement liste tous les SSID aux alentours et les stocke dans une liste. Chaque SSID est accompagné de son BSSID. Le couple SSID+BSSID fait office de clé unique ; L'avenir de cette fonction est incertain mais je vais tenter de produire quelque chose de sympa pour les Wifi Addicts :)

s

mardi 20 mai 2014

Androïd ; Playing with storage info


    public void test(){
        try {
            File file = Environment.getExternalStorageDirectory();
            String strFile = file.getPath();
            Log.d("wififun", "ext storage dir ="  + strFile);
            Log.d("wififun", "ext storage length ="  + file.length());
            Log.d("wififun", "ext storage total space ="  + file.getTotalSpace()/1024/1024 + "mb");
            Log.d("wififun", "ext storage free space ="  + file.getFreeSpace()/1024/1024 + "mb");

            File myFile = new File(strFile + "/wififun.log");
            Log.d("wififun","can write new log file= " + myFile.canWrite());
            Log.d("wififun","exists new log file= "+myFile.exists());
            Log.d("wififun","size new log file= "+myFile.length());

            FileOutputStream fileOutputStream = new FileOutputStream(myFile);
            String str = "message debug de test d'écriture dans log file";
            fileOutputStream.write(str.getBytes());

            fileOutputStream.close();

        } catch (Exception e) {
            log("Exception:test:"+e.getMessage());
        }
    }

mercredi 14 mai 2014

Androïd : ScrollView contenant un LinearLayout vertical :

Dans l'activity_main.xml :
    <ScrollView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/scrollView"
        android:layout_below="@+id/editText"
        android:layout_above="@+id/button"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true">
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/linearLayout"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:orientation="vertical">
        </LinearLayout>
    </ScrollView>


Dans le OnCreate du MainActivity.java :
        LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
        for(int i=0;i<50;i++) {
            TextView textView = new TextView(this);
            textView.setText("inside_" + i);
            linearLayout.addView(textView);
        }


vendredi 9 mai 2014

Androïd programmation : Tentative (KO) d'arrêt de processus avec su (tél non rooté)

            Process p = Runtime.getRuntime().exec("su");
            DataOutputStream os = new DataOutputStream(p.getOutputStream());
            String killCommand = "am force-stop com.android.smspush";
            os.writeBytes(killCommand + "\n");
            os.writeBytes("exit\n");
            os.flush();

mercredi 7 mai 2014

Débuter avec le TelephonyManager et l'ActivityManager sur Androïd

package com.reunisoft.gsmhack.gsmhack;

import android.annotation.TargetApi;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Build;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.telephony.CellIdentityGsm;
import android.telephony.CellInfo;
import android.telephony.CellInfoGsm;
import android.telephony.CellLocation;
import android.telephony.CellSignalStrengthGsm;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.text.Layout;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.TableLayout;
import android.widget.TableRow;
import android.widget.TextView;
import android.widget.Toast;

import java.util.List;

// A DVA FREE OPEN SOURCE DEMO
public class MainActivity extends ActionBarActivity {

    int i = 0;

    @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        refreshAllInfos();

        final Button button = (Button)findViewById(R.id.button);
        button.setText("Refresh");
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                refreshAllInfos();
            }
        });
    }

    public void refreshAllInfos() {
        try {
            TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            String str = "IMEI=" + telephonyManager.getDeviceId() + "\r\n";
            str += "Line 1 number=" + telephonyManager.getLine1Number() + "\r\n";
            str += "Network Op = " + telephonyManager.getNetworkOperatorName() + "\r\n";

            boolean roaming = telephonyManager.isNetworkRoaming();
            str += "Roaming = " + String.valueOf(roaming) + "\r\n";
            str += "Soft version = " + telephonyManager.getDeviceSoftwareVersion() + "\r\n";

            final GsmCellLocation cellLocation = (GsmCellLocation) telephonyManager.getCellLocation();
            str += "Cell ID = " + cellLocation.getCid() + "\r\nActive processes ID = ";

            ActivityManager manager =  (ActivityManager)getSystemService(ACTIVITY_SERVICE);
            final List<ActivityManager.RunningAppProcessInfo> runningAppProcesses = manager.getRunningAppProcesses();
            for(int i=0;i<runningAppProcesses.size();i++){
                ActivityManager.RunningAppProcessInfo rapi = (ActivityManager.RunningAppProcessInfo) runningAppProcesses.get(i);
                str += rapi.pid + "/";
            }
          
            updateTextView(str);
        }
        catch (Exception e){
            updateTextView(e.getMessage());
        }

    }

    public void updateTextView(String toThis) {
        TextView textView = (TextView) findViewById(R.id.textView);
        textView.setText(toThis);
        return;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /* Called when the application is minimized */
    @Override
    protected void onPause()
    {
        super.onPause();
    }

    /* Called when the application resumes */
    @Override
    protected void onResume()
    {
        super.onResume();
    }

}

Nouvelle application Androïd : LotoFun

LotoFun est une application Androïd qui vous donne huit numéros au hasard compris entre 1et 49 lorsque vous lancez l'application. Un bouton "Quitter" permets alors de sortir de l'application.

Vous pouvez télécharger la dernière version de LotoFun pour Androïd en cliquant sur le lien ci-dessous (directement depuis votre périphérique Androïd) :


Il est probable que vous ayez à modifier les paramètres de sécurité de votre système Androïd, afin d'autoriser les applications ne provenant pas de Google Play Store.

mardi 6 mai 2014

Programmation Androïd ; Les bases du Wifi

Android Manifest :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.reunisoft.lotofun.lotofunmodule01" >

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.reunisoft.lotofun.lotofunmodule01.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

    <uses-feature android:name="android.hardware.wifi" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

</manifest>

Dans le MainActivity.java :
package com.reunisoft.lotofun.lotofunmodule01;

import android.net.wifi.WifiManager;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.EditText;
import android.widget.TextView;
import android.content.Context;

public class MainActivity extends ActionBarActivity {

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

        EditText editText = (EditText) findViewById(R.id.editText);

        try {
            WifiManager myWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
            boolean wasEnabled = myWifiManager.isWifiEnabled();

            myWifiManager.setWifiEnabled(true);
            while (!myWifiManager.isWifiEnabled()) {
                editText.setText("Enabling Wifi...", TextView.BufferType.NORMAL);
            }

            if (myWifiManager.isWifiEnabled() == true) {
                editText.append("Wifi is enabled");

            }
            else
                editText.append("Wifi is not enabled");

        }
        catch (Exception e) {
            editText.setText(e.getMessage(), TextView.BufferType.NORMAL);
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}