目前分類:Android筆記 (435)

瀏覽方式: 標題列表 簡短摘要

ST839602.JPG 
俗語說的好「出來混總是要還的」,既然說只要夠多人需要我就寫如何將HTC HD2改成Android 2.2手機,雖然人數還沒到(其實我故意寫這麼高的門檻,沒想到反應熱烈)但是既然大家真的都有需要,只好乖乖的將教學寫一寫,在開始教學前筆者要先強調幾件事情:
1.這個方法不是將內建的Windows Mobile刪除改成Android,而是在WM的基底下跑類似模擬器的機制,但還是需要刷RADIO ROM,刷機有風險沒把握沒膽的人請千萬不要嘗試,也不用問有沒有其他方法了
2.現在HTC HD2執行的是Desire的韌體核心,所以在判定上會變成Desire。
3.本教學依照XDA論壇的教學整理而成,本人僅提供教學不負任何責任,失敗的話責任自負,怕死的話請不要繼續執行!

======刷機開始======

1.首先下載筆者整理好的檔案解壓縮(檔案在本文末),接著將您的HD2關機,按住音量下不放並開啟電源,進入三色模式:
01.JPG

2.進入三色模式後將HD2與電腦連線:
02.JPG

3.進入HSPL目錄,執行HSPL.exeHSPL簡單說就是讓HTC的手機可以刷自製韌體而且每個機型所需檔案都不一樣):
03.jpg

4.接著點選「NEXT」:
04.jpg

5.此時就開始破解SPL了:
05.jpg

6.如果破解成功的話您的HTC HD2會顯示以下畫面(寫著We hacked it!):
06.JPG

7.刷SPL成功後電腦會顯示「Successfully done!」,點選確定後你就可以開始自己刷RADIO或其他韌體了:
07.jpg 

8.接著再度關機,在HD2與電腦連線的狀態下再次進入四色模式(按住音量下+開機),接著執行「Leo_CustomRUU」目錄中的「CustomRUU.exe」:
08.jpg
▲在刷機的韌體目錄中我只放了RADIO ROM,筆者使用2.12.50版,網路上還有專門開機後直接執行Andorid的韌體,但筆者認為最好保留原系統這樣起碼可以使用原本的OS,如果有什麼意外起碼還有WM可用。

9.點選瞭解後,再點選NEXT:
09.jpg

10.再問一遍,一樣比照辦理:
10.jpg

11.如果一切正常的話軟體會開始辨識手機:
11.jpg

12.點選NEXT:
12.jpg

13.開始刷機,此時千萬不要中斷連線:
13.jpg

14.此時您的HD2應該是這樣的畫面:
14.JPG

15.完成,接下來就準備執行Android主程式:
15.jpg

16.將筆者提供的MATTC或GPC大整理的任體解壓縮後,「Android」目錄複製到記憶卡的「根目錄」中(可改用最下方的新韌體,不定時更新)
18.jpg

17.將記憶卡插入HD2中,先執行Android目錄中的「CLRCAD.exe」(忘記執行會沒有聲音,播放影片也會有問題):
19.JPG

18.再執行「HARET.exe」開始執行Android:
20.JPG

19.開始執行,第一次執行Android時可能會比較久,有的時候可能長達5分鐘,之後只要兩分鐘以內就可以開機完畢:
21.JPG

20.接下來你就可以看到HD2跑Android 2.2啦,內容跟市售的Desire幾乎完全一樣,而且核心是2.2版:
2010-08-13-20-54-12.png

這樣的改機過程並沒有動到WM的核心所以只要關機或換電池就要從步驟17重來一遍,但你之前所有存放資料與下載的程式並不會有影響。

 

======HD2 Android 2.2 已知問題======

筆者所使用的ROM是基於XDA論壇或GPC大開發的版本,裡面有最完整的HTC SENSE與中文輸入法,已經ROOT過且內建Flash Player 10.1 已經相當接近完美,但是還是有一些問題:
1.偶而會有無預警的觸控螢幕失效另外HD2 Android的效能與記憶卡等級有很大關係,如果你覺得不順請買SANDISK CLASS6的記憶卡
2.無法開啟Wi-Fi熱點功能,會重新開機(但可以使用
android-wifi-tether 2.0.5PRE-6 
虛擬AP)
3.已知固定BUG:指南針方位錯誤「W」才是北方、錄影沒有720P、Foot Print無作用,後續版本會改進。
4.如果ROM有出新版的話檔案必須重新覆蓋,如果要保存資料請備份目錄中的DATA.img(但不建議)
5.聽說9月份會有完全取代WM的原生韌體,如果確定沒問題我再通知大家使用。
6.送修前要記得刷回原廠韌體,否則保固會受影響。
7.偶而會遇到不能安裝的軟體(如Angry Bird),請卸載SD卡後再次下載安裝即可
8.想到再補...XD


最後我再次強調,刷機有風險,怕死的千萬不要執行,也不要問我任何我已經寫在這邊的問題,我不想浪費生命在回答廢話上,小弟也不會無償幫你刷機(代刷服務請點我我都已經寫這麼詳盡了,自助人助一下吧!

最重要的是本文可以轉貼,但請註明出處,很多大陸的網站盜連圖文還加自己LOGO很沒意思,請大家自愛,最後附上小弟製作的懶人包:
點我下載(密碼:http://kocpc.pixnet.net/blog),已改版只保留刷HSPL與RADIO ROM的檔案,韌體請服用小弟提供最新版連結。

2010/09/19更新mccmSE v1.0:現在最穩定的版本,YOUTUBE與動新聞非常流暢(最上方也沒有綠線, 可使用WI-FI AP,幾乎不會僵直,也有500萬畫素相機,本版號稱支援PPP但我一樣上網有變快(本來就還不錯),缺點是LED提示燈無作用與內建手電筒不會亮(但有內建其他軟體可用,另外本版本牙、WIFI正常,而且有手寫輸入法),在安裝後設定帳號完畢後畫面會黑掉很久請耐心等候(約10~15分,之後就正常了):
http://www.multiupload.com/TJWUXEO28Z

2010/09/22 gpc_stock_cht_froyo V6版:至今最好的版本之一,使用EVO核心,LED燈號充電時有作用,原生的WIFI熱點可用,至今最穩定的高速PPP,HTC Plurk與中華電信的服務都有內建進去,現在發現的問題有偶而會僵直但機率很低、照相閃光燈會跟相機不同步還有啟動時畫面很像手機死當此為正常現象,在意的話可以開手電筒後再拍XD:
http://www.multiupload.com/O8W8E5NFBQ(解壓縮密碼:gpc@mobile01)

2010/9/2更新GPC大在M01發表的V15新韌體,作者建議要全部砍掉重練
http://www.megaupload.com/?d=TJOGHUYM(解壓縮密碼:gpc@mobile01)


如果每次換韌體後都要重新安裝軟體覺得很麻煩的話建議使用「鈦備份」或GPC的超級管理員的一鍵備份/還原功能,請參閱這一篇教學寫的很好(請點我),我就不自己重寫了。

一樣將檔案解壓縮到Android目錄後執行即可,可將自己的聯絡人與安裝檔案資料完整還原到此版韌體中(建議將原本目錄變更名稱,並將原本的data.img複製到新的Android目錄中,再執行CLRCAD.exe與HAERT.exe) 

另外提供HD2 Android每次更新後軟體又要重裝很煩,在這邊提供一個小技巧,只要在Android目錄中建立一個「AndroidApps」目錄,並將常用軟體的APK檔放在裡面,就算是DATA.img砍掉重練,在開機完畢後系統會幫您自己安裝進去,很方便吧?

由於很多人在問可以讓HD2 Android與電腦同步的HTC SYNC,今天剛好逛到補上HTC Sync 3.0下載(可直接同步iTunes音樂): 點我下載原出處,比價王)原載點掛了的話請跟我說一聲我再補傳。

戮克 發表在 痞客邦 留言(0) 人氣()

原文位址

HTTP://blog.csdn.net/sunrock/article/details/5675067

 

在Android中,除了從介面上啟動程式之外,還可以從命令列啟動程式,使用的是命令列工具am.

 

usage: am [subcommand] [options]

 

start an Activity: am start [-D] <INTENT>
-D: enable debugging

 

戮克 發表在 痞客邦 留言(0) 人氣()

1. 使用瀏覽器開啟

Uri myBlogUri = Uri.parse("http://kuikui.javaeye.com");

returnIt = new Intent(Intent.ACTION_VIEW, myBlogUri);

2,地圖

Uri mapUri = Uri.parse("geo:38.899533,-77.036476");

returnIt = new Intent(Intent.ACTION_VIEW, mapUri);

3,調撥打電話界面

Uri telUri = Uri.parse("tel:100861");

returnIt = new Intent(Intent.ACTION_DIAL, telUri);

4. 直接撥打電話

戮克 發表在 痞客邦 留言(0) 人氣()

轉載請標明出處: http://blog.csdn.net/lmj623565791/article/details/44754023; 本文出自:【張鴻洋的博客】 最近比較忙,加上希

 

 

 

轉載請標明出處: 
http://go.rritw.com/blog.csdn.net/lmj623565791/article/details/44754023; 
本文出自:【張鴻洋的博客】

最近比較忙,加上希望停下來整理些東西,所以blog的更新可能會比較慢,持續奮鬥中。今天给大家整理下android牆外的學習資源,大家有什麼推薦的直接留言。

1、國外教程網站

不解釋

很不錯的網站,免費的,包含android的教程也比較全面,並且教程中經常引用大牛blog,會有很多意外發現。代碼資源有提供,但是不是很好找。

非常推薦

戮克 發表在 痞客邦 留言(0) 人氣()

开源中国的 IT 公司开源软件整理计划介绍

微软周一宣布与11家硬件设备商就在部分Android产品中预装Office(包括Word、Excel、PowerPoint和OneNote)、OneDrive以及Skype等应用达成合作意向。相关产品将会在今年晚些时候上市。虽然上述的六款应用均能通过Google Play免费下载,但预装至Android设备上对微软及其生态而言仍是一场伟大的胜利。此外,与Android设备商的合作也再次凸显了微软强调跨平台软件和服务的新战略。

微软的合作伙伴包括:三星、戴尔、 硕联合科技、TrekStor(德国)、JP Sa Couto(葡萄牙)、Datamatic(意大利)、DEXP(俄罗斯)、Hipstreet(加拿大)、QMobile(巴基斯坦)、Tecno(非洲)以及Casper(土耳其)。

尽管具体哪些型号的产品将会预装微软应用尚还不得而知,但可以预计这些设备会在今年晚些时候上市。其中大多数设备目前尚未被官方发布。

三 星显然是微软合作名单中最大牌的厂商。该公司早在今年早些时候举行的世界移动大会(MWC)上就宣布,新的Galaxy S6和Galaxy S6 edge智能手机都将会预装OneNote、OneDrive和Skype。此外,三星今天也还证实,其2015年上半年发布的几款Android平板电 脑也将会预装微软应用。

“当把设备和服务汇聚到一起时,伟大的事情就会发生。”微软商业开发部门执行副总裁佩吉·约翰逊(Peggy Johnson)表示,“我们与三星的合作正是微软要将最好的生产力服务带给所有人、所有设备的努力结果——我们要让人们能够无论在何时何地都可以提供生产力。”

稿源:网易科技

戮克 發表在 痞客邦 留言(0) 人氣()

本文章出自http://blog.csdn.net/zhaokaiqiang1992,转载请说明!

 

在一个滑动控件或者是布局里面,添加另外一个可以滑动的控件,通常会造成一些莫名其妙的问题。今天主要介绍在工作中遇到的,在ScrollView布局中嵌套Listview显示不正常,和在Listview中嵌套Listview的滑动冲突的问题。

1.ScrollView布局中嵌套Listview显示不正常的解决方案

目前来说,解决这个问题有好几种解决方案,这里只介绍其中两种比较简单易行的其中两种。

(1)自定义一个Listview,继承自Listview,代码如下:

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片
 

戮克 發表在 痞客邦 留言(0) 人氣()

很多網友可能發現Android中除了Service還有一個IntentService,他們之間到底有哪些區別呢? 在繼承關係上而言IntentService是Service的子類,內部實現的代碼中涉及到一些Android入門開發者不了解的Looper,Android123在早期的文章中已經說明他們的用法,這裡不再贅述,有關原理大家可以看源碼實現如下:

public abstract class IntentService extends Service {
private volatile Looper mServiceLooper;
private volatile ServiceHandler mServiceHandler; //一個Handler封裝了Looper物件
private String mName;
private boolean mRedelivery;

 

private final class ServiceHandler extends Handler {
public ServiceHandler(Looper looper) {
super(looper);

戮克 發表在 痞客邦 留言(0) 人氣()

一般情況下通過設置一下參數縮放

wv.getSettings().setBuiltInZoomControls(true); //顯示放大縮小 controler

 

wv.getSettings().setSupportZoom(true); //可以縮放

 

wv.getSettings().setDefaultZoom(ZoomDensity.CLOSE);//預設縮放模式

 

昨天設置以上無效 使用wv.setInitialScale(100);

 

http://www.son1c.net/android_develop/2106.html

戮克 發表在 痞客邦 留言(1) 人氣()

Android應用經常會和伺服器端交互,這就需要手機用戶端發送網路請求,下麵介紹四種常用網路請求方式,

java.net包中的HttpURLConnection類




Get方式:




view plain

 

// Get方式請求

 

public static void requestByGet() throws Exception {

戮克 發表在 痞客邦 留言(0) 人氣()

String s="***********\0";

//這裡的\0是因為伺服器端指定發送的消息必須跟著結束符。而直接用println(s)傳送時出現錯誤,因為string 類是沒有'0'結束符的。

 

char[] msg_01=new char[s.length()];

 

msg_01 = s.toCharArray(); //這裡將字串轉換為一個字元陣列,而char是有結束符的。伺服器能接收到正確的消息並給予回應。



//byte[] msg_03=new byte[100];

 

//msg_03=s.getBytes();

戮克 發表在 痞客邦 留言(0) 人氣()

package android.wifi;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetrics;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class WifiViewActicvity extends Activity {

    private static final int MENU_START = 0;
    private static final int MENU_PAUSE = 1;
    private static final int MENU_QUIT = 2;
    private MySurfaceView mySurfaceView;
    private WifiManager mWifiManager;
    private boolean run;
    private static final float MIN_LEVEL = -120;
    private static final float MAX_LEVEL = 0;
    private static final int TIME_BUFFDER_SIZE = 50;
    private HashMap apMap;
    private long cnt;

    private int[] lineColor = { Color.BLUE, Color.CYAN, Color.GREEN,
            Color.MAGENTA, Color.RED, Color.YELLOW, Color.WHITE };
    private int indexOfColor;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mySurfaceView = new MySurfaceView(getApplication(), 0,
                TIME_BUFFDER_SIZE, MIN_LEVEL, MAX_LEVEL, TIME_BUFFDER_SIZE,
                (int) ((MAX_LEVEL - MIN_LEVEL) / 10));
        setContentView(mySurfaceView);
        apMap = new HashMap();
        run = false;
        cnt = 0;
        indexOfColor = 0;
    }

    private void startScan() {
        run = true;
        mWifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
        registerReceiver(mBroadcastReceiver, new IntentFilter(
                WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
        mWifiManager.startScan();
    }

    private void pauseScan() {
        run = false;
    }

    private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            List scanResults = mWifiManager.getScanResults();
            for (ScanResult result : scanResults) {
                String bssid = result.BSSID;
                int level = result.level;
                AccessPoint ap = apMap.get(bssid);
                if (ap == null) {
                    ap = new AccessPoint(TIME_BUFFDER_SIZE + 1);
                    ap.setColor(lineColor[indexOfColor]);
                    indexOfColor++;
                    indexOfColor %= lineColor.length;
                }
                ap.setLevel(cnt, Float.valueOf(level));
                ap.setUpdate(true);
                apMap.put(bssid, ap);
            }
            for (Map.Entry e : apMap.entrySet()) {
                AccessPoint ap = e.getValue();
                if (!ap.isUpdate()) {
                    ap.setLevel(cnt, null);
                }
                ap.setUpdate(false);
                apMap.put(e.getKey(), ap);
            }
            if (run) {
                mySurfaceView.setData(cnt, apMap);
                cnt++;
                startScan();
            }
        }
    };

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(0, MENU_START, 0, "START").setIcon(
                android.R.drawable.ic_media_play);
        menu.add(0, MENU_PAUSE, 0, "PAUSE").setIcon(
                android.R.drawable.ic_media_pause);
        menu.add(0, MENU_QUIT, 0, "QUIT").setIcon(
                android.R.drawable.ic_menu_close_clear_cancel);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case MENU_START:

            startScan();
            break;
        case MENU_PAUSE:
            pauseScan();
            break;
        case MENU_QUIT:
            finish();
            break;
        }
        return super.onContextItemSelected(item);
    }
}

class AccessPoint {
    private Float[] data;
    private boolean update;
    private int color;

    AccessPoint(int size) {
        data = new Float[size];
    }

    void setLevel(long cnt, Float level) {
        data[(int) (cnt % data.length)] = level;
    }

    void setUpdate(boolean update) {
        this.update = update;
    }

    boolean isUpdate() {
        return update;
    }

    void setColor(int color) {
        this.color = color;
    }

    int getColor() {
        return color;
    }

    Float[] getData() {
        return data;
    }
}

class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback,
        Runnable {
    private SurfaceHolder mSurfaceHolder;
    private Thread thread;
    private Canvas canvas;
    private MyGraph myGraph;
    private float minX, maxX, minY, maxY;
    private int numDivX, numDivY;
    private long cnt;
    private HashMap apMap = new HashMap();

    MySurfaceView(Context context, float minX, float maxX, float minY,
            float maxY, int numDivX, int numDivY) {
        super(context);
        mSurfaceHolder = getHolder();
        mSurfaceHolder.addCallback(this);
        myGraph = new MyGraph();
        this.minX = minX;
        this.maxX = maxX;
        this.minY = minY;
        this.maxY = maxY;
        this.numDivX = numDivX;
        this.numDivY = numDivY;
    }

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

    public void surfaceCreated(SurfaceHolder holder) {
        thread = new Thread(this);
        thread.start();
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        thread = null;
    }

    public void run() {

        while (thread != null) {
            canvas = mSurfaceHolder.lockCanvas();
            myGraph.drawRule(canvas);

            String[] bssidName = new String[apMap.size()];
            int[] bssidColor = new int[apMap.size()];
            int num = 0;
            for (Map.Entry e : apMap.entrySet()) {
                AccessPoint ap = e.getValue();
                Float[] originalData = ap.getData();
                int size = originalData.length;
                Float[] data = new Float[2 * size];
                for (int i = 0; i < size; i++) {
                    data[2 * i] = Float.valueOf(i);
                    data[2 * i + 1] = (cnt < size) ? originalData[i]
                            : originalData[(int) ((i + cnt + 1) % size)];
                }
                myGraph.drawLines(canvas, data, ap.getColor());
                bssidName[num] = e.getKey();
                bssidColor[num] = ap.getColor();
                num++;
            }
            if (apMap.size() > 0) {
                myGraph.drawLegend(canvas, bssidName, bssidColor);
            }
            mSurfaceHolder.unlockCanvasAndPost(canvas);
            try {
                Thread.sleep(500);
            } catch (InterruptedException e) {
            }
        }
    }

    @Override
    protected void onSizeChanged(int width, int heigh, int old_w, int old_h) {
        int size = (width < heigh) ? width : heigh;
        myGraph.setDarwArea(size, size, minX, maxX, minY, maxY, numDivX,
                numDivY, false, true);
    }

    void setData(long cnt, HashMap apMap) {
        this.cnt = cnt;
        this.apMap = apMap;
    }
}

class MyGraph {
    private static final float TOP_MARGIN_RATIO = 0.05f; 
    private static final float BOTTOM_MARGIN_RATIO = 0.05f; 
    private static final float LEFT_MARGIN_RATIO = 0.05f; 
    private static final float RIGHT_MARGIN_RATIO = 0.05f;
    private boolean labelFlagX;  
    private boolean labelFlagY; 
    private Paint paintLabel = new Paint();
    private float bodyW; 
    private float bodyH; 
    private float graphW;
    private float graphH; 
    private float graphOriginX;  
    private float graphOriginY;  
    private float minX, maxX, minY, maxY;
    private int numDivX, numDivY;

    private float legendOriginX;
    private float legendOriginY;
    private Paint legendLabel = new Paint();

    void setDarwArea(float drawW, float drawH, float xMin, float xMax,
            float yMin, float yMax, int xDivNum, int yDivNum,
            boolean labelXFlag, boolean labelYFlag) {
        this.minX = xMin;
        this.maxX = xMax;
        this.minY = yMin;
        this.maxY = yMax;
        this.numDivX = xDivNum;
        this.numDivY = yDivNum;
        this.labelFlagX = labelXFlag;
        this.labelFlagY = labelYFlag;
        // ラベルを含むグラフエリア
        bodyW = (1 - LEFT_MARGIN_RATIO - RIGHT_MARGIN_RATIO) * drawW;
        bodyH = (1 - TOP_MARGIN_RATIO - BOTTOM_MARGIN_RATIO) * drawH;
        // ラベルを含まないグラフエリア
        FontMetrics fontMetrics = paintLabel.getFontMetrics();
        graphH = bodyH;
        if (labelXFlag) {
            graphH += (fontMetrics.top + fontMetrics.bottom);
        }
        graphW = bodyW;
        if (labelYFlag) {
            float maxTextWidth = 0;
            for (int i = 0; i < yDivNum + 1; i++) {
                String text = String
                        .valueOf(yMin + i * (yMax - yMin) / yDivNum);
                float baseX = paintLabel.measureText(text); 
                maxTextWidth = (baseX > maxTextWidth) ? baseX : maxTextWidth;
            }
            graphW -= maxTextWidth;
        }

        graphOriginX = LEFT_MARGIN_RATIO * drawW + (bodyW - graphW);
        graphOriginY = TOP_MARGIN_RATIO * drawH;
        // 凡例原点
        legendOriginX = graphOriginX + 0.05f * graphW;
        legendOriginY = graphOriginY + 0.05f * graphH;
    }

    void drawRule(Canvas canvas) {
        canvas.drawColor(Color.WHITE);
        Paint paintRule = new Paint();
        paintRule.setStyle(Paint.Style.FILL);
        paintRule.setColor(Color.BLACK);
        for (int i = 0; i < numDivX + 1; i++) {
            canvas.drawLine(graphOriginX + i * (graphW / numDivX),
                    graphOriginY, graphOriginX + i * (graphW / numDivX),
                    graphOriginY + graphH, paintRule);
        }
        for (int i = 0; i < numDivY + 1; i++) {
            canvas.drawLine(graphOriginX,
                    graphOriginY + i * (graphH / numDivY), graphOriginX
                            + graphW, graphOriginY + i * (graphH / numDivY),
                    paintRule);
        }
        paintLabel.setColor(Color.GRAY);
        FontMetrics fontMetrics = paintLabel.getFontMetrics();
        if (labelFlagX) {
            for (int i = 0; i < numDivX + 1; i++) {
                String text = String
                        .valueOf(minX + i * (maxX - minX) / numDivX);
                float baseX = paintRule.measureText(text) / 2; 
                float baseY = -fontMetrics.top; 
                canvas.drawText(text, graphOriginX + i * (graphW / numDivX)
                        - baseX, graphOriginY + graphH + baseY, paintLabel);
            }
        }
        if (labelFlagY) {
            for (int i = 0; i < numDivY + 1; i++) {
                String text = String
                        .valueOf(minY + i * (maxY - minY) / numDivY);
                float baseX = paintLabel.measureText(text); 
                float baseY = -fontMetrics.top / 2; 
                canvas.drawText(text, graphOriginX - baseX, graphOriginY
                        + graphH - i * (graphH / numDivY) + baseY, paintLabel);
            }
        }
    }

    void drawLines(Canvas canvas, Float[] data, int color) {
        
        for (int i = 0; i < data.length / 2; i++) {
            if (data[2 * i] != null && data[2 * i + 1] != null) {
                data[2 * i] = (data[2 * i] < minX) ? minX : data[2 * i];
                data[2 * i] = (data[2 * i] > maxX) ? maxX : data[2 * i];
                data[2 * i + 1] = (data[2 * i + 1] < minY) ? minY
                        : data[2 * i + 1];
                data[2 * i + 1] = (data[2 * i + 1] > maxY) ? maxY
                        : data[2 * i + 1];
            }
        }
        float[] pts = new float[4 * (data.length / 2 - 1)];
        float pxlParUnitX = graphW / (maxX - minX); 
        float pxlParUnitY = graphH / (maxY - minY); 
        for (int i = 0; i < data.length / 2 - 1; i++) {
            if (data[2 * i] != null && data[2 * i + 1] != null
                    && data[2 * i + 2] != null && data[2 * i + 3] != null) {
                float x1 = data[2 * i];
                float y1 = data[2 * i + 1];
                float x2 = data[2 * i + 2];
                float y2 = data[2 * i + 3];
                pts[4 * i] = (x1 - minX) * pxlParUnitX + graphOriginX;
                pts[4 * i + 1] = graphH - (y1 - minY) * pxlParUnitY
                        + graphOriginY;
                pts[4 * i + 2] = (x2 - minX) * pxlParUnitX + graphOriginX;
                pts[4 * i + 3] = graphH - (y2 - minY) * pxlParUnitY
                        + graphOriginY;
            }
        }
        Paint paint = new Paint();
        paint.setColor(color); 
        paint.setStrokeWidth(2); 
        canvas.drawLines(pts, paint);
    }

    void drawLegend(Canvas canvas, String[] name, int[] color) {
        Paint paint = new Paint();
        float lineLength = 0.05f * graphW;
        FontMetrics fontMetrics = legendLabel.getFontMetrics();
        float width;
        float textW = 0;
        for (int i = 0; i < name.length; i++) {
            width = legendLabel.measureText(name[i]);
            textW = (width > textW) ? width : textW;
        }
        float textH = -fontMetrics.top + fontMetrics.bottom;

        float legendH = name.length * textH + fontMetrics.bottom;
        float legendW = textW + lineLength;

        paint.setColor(Color.WHITE);
        paint.setStyle(Paint.Style.FILL);
        canvas.drawRect(legendOriginX, legendOriginY, legendOriginX + legendW,
                legendOriginY + legendH, paint);

        paint.setColor(Color.BLACK);
        paint.setStyle(Paint.Style.STROKE);
        canvas.drawRect(legendOriginX, legendOriginY, legendOriginX + legendW,
                legendOriginY + legendH, paint);
        float x, y;
        x = legendOriginX;
        y = legendOriginY + textH;
        for (int i = 0; i < name.length; i++) {
            paint.setColor(color[i]);
            paint.setStrokeWidth(2);
            canvas.drawLine(x, y + fontMetrics.top / 2, x + lineLength, y
                    + fontMetrics.top / 2, paint);
            paint.setColor(Color.BLACK);
            canvas.drawText(name[i], x + lineLength, y, legendLabel);
            y += textH;
        }
    }
}


戮克 發表在 痞客邦 留言(0) 人氣()

Android comes with a complete support for the WiFi connectivity. The main component is the system-provided WiFiManager. As usual, we obtain it via getSystemServices() call to the current context.

Once we have the WiFiManager, we can ask it for the current WIFi connection in form of WiFiInfo object. We can also ask for all the currently available networks via getConfiguredNetworks(). That gives us the list of WifiConfigurations.

In this example we are also registering a broadcast receiver to perform the scan for new networks. 


WiFiDemo.java

Code:

戮克 發表在 痞客邦 留言(0) 人氣()

import android.net.ConnectivityManager;

import android.os.Bundle;
import android.widget.Toast;
public class pingtest extends Activity {
 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);
 chkStatus();

戮克 發表在 痞客邦 留言(0) 人氣()

String url = "http://127.0.0.1.asp?";

HttpPost httpPost = new HttpPost(url);

try {

ArrayList < namevaluepair > nameValuePairs = new ArrayList < namevaluepair > ();
nameValuePairs.add(new BasicNameValuePair("id", "...value"));
nameValuePairs.add(new BasicNameValuePair("pwd", "...value"));

UrlEncodedFormEntity entityRequest = 
new UrlEncodedFormEntity(nameValuePairs, "UTF-8");

httpPost.setEntity(entityRequest);
http.execute(httpPost);

} catch (...) {...;}


戮克 發表在 痞客邦 留言(0) 人氣()

/**

* 断点续传
* @param url
*/
private void duanDianXuChuan(final String url){
try {
Runnable r = new Runnable() {
@Override
public void run() {
getRemoteFile(url);

戮克 發表在 痞客邦 留言(0) 人氣()

ImageView imageView = new ImageView(context);

URL url = new URL("圖片路徑");
URLConnection conn = url.openConnection();
        conn.connect();
        InputStream is = conn.getInputStream();
        BitmapFactory.Options options=new BitmapFactory.Options();
            options.inSampleSize = 10;
originalImage = BitmapFactory.decodeStream(is,null,options);
imageView.setImageBitmap(bitmapWithReflection);


文章標籤

戮克 發表在 痞客邦 留言(0) 人氣()

轉載於 http://mdev.cc/dev

 
  • 原理:通过下载文件的大小,和当前读取的字节数,在固定的时间中检测速度,详细请看代码,   
  • 我这里使用可一张图片做的测试:http://www.straitstimes.com/STI/STIMEDIA/image/20090324/BUSKING.jpg  

     NetWorkSpeedInfo.java Android NetWork info

    package cc.androidos.speed;


    /**
     * A class for android network info 
     * @author Wang Baoxi
     * @version 1.0
     * @since 2009-5-27

    戮克 發表在 痞客邦 留言(0) 人氣()

    package com.example.android.apis;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import android.app.Activity;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.util.Log;
    public class ApiDemos extends Activity {

    戮克 發表在 痞客邦 留言(0) 人氣()

    1.       WIFi網路卡有五個狀態,實際就是一些常數:

    WIFI_STATE_DISABLED:WIFI不能使用,其值是:1.

    WIFI_STATE_DISABLING:WIFI正在關閉中,由於WIFI關閉是需要一個過程,其值是:0

    WIFI_STATE_ENABLED:WIFI可以使用,其值是:3.

    WIFI_STATE_ENABLING:WIFI正在開啟中, 其值是:2.

    WIFI_STATE_UNKNOWN:WIFI未知網卡狀態,當手機或程式出現错誤引起WIFi不可用,其值是:4.

    2.       操作WIFi需要取得的權限:(主要操作權限有以下四個)

    CHANGE_NETWORK_STATE :允許修改網路狀態的權限。

    CHANGE_WIFI_STATE :允許修改 WIFI 狀態的權限。

    ACCESS_NETWORK_STATE :允許網路狀態的權限。

    戮克 發表在 痞客邦 留言(0) 人氣()

    方法如下: 
    ConnectivityManager cManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo info = cwjManager.getActiveNetworkInfo(); 
      if (info != null && info.isAvailable()){ 
           //do something 
           //能上網 
            return true; 
      }else{ 
           //do something 
           //不能上網

    戮克 發表在 痞客邦 留言(0) 人氣()