顯示具有 Android 標籤的文章。 顯示所有文章
顯示具有 Android 標籤的文章。 顯示所有文章

2018年12月24日 星期一

[Android] google 地圖 沒有網路連線


解法參考 https://goo.gl/7p3YQh



小米收機在行動網路4g的環境下

打開 Google Map 地圖,會一直出現沒有網路連線,並且不能搜尋路徑

但是在wifi環境下是正常的

這時候 點開設定=>個人內容=>
嘗試關閉 [網路和應用程式活動] 
[時間軸電子郵件]
[google 相簿]
[在你的個人資料上顯示你所發布的內容]

大概是某個設定裡頭的資料紀錄有bug導致的,可嘗試關閉看看



2013年3月7日 星期四

內嵌廣告的剋星-Adblock Plus

內嵌廣告的剋星-Adblock Plus
阻擋一些Android 應用程式app的廣告

2012年10月15日 星期一

Android 頁面轉換 & 傳遞參數




傳遞參數 和開啟子視窗



        //呼叫子視窗 的設定
        Intent intent = new Intent();
        intent.setClass(MainActivity.this, ui.class);
       
       
        //MainActivity.this.finish(); //釋放父視窗
       
       
        //設定Bundle
        //設定傳送參數
        Bundle bundle = new Bundle();
        bundle.putString("String_name", "參數內容");
        intent.putExtras(bundle);
        startActivityForResult(intent, 0); //呼叫page2並要求回傳值
       
       
        startActivity(intent);//呼叫子視窗



於子視窗 onCreate() 接收參數


//設定Bundle 接收父視窗的參數
Bundle bundle = this.getIntent().getExtras();
HostIP = bundle.getString("String_name");

2012年10月5日 星期五

Android EditText Event!!!




EditText的事件

myEditText.addTextChangedListener(new TextWatcher(){
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
//輸入完成後 執行
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
// TODO Auto-generated method stub
//輸入之前 執行
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub

}});

Android Thread使用 & 跨執行UI & 參數傳遞


from http://www.javaworld.com.tw/roller/koji/entry/an*******

http://wangshifuola.blogspot.tw/2011/06/androidthreadmessagehandler.html

http://www.cnblogs.com/playing/archive/2011/03/24/1993583.html

http://blog.csdn.net/mylzc/article/details/6736988




         //定義message id
  private static final int UPDATE_SETTING_SUCCESS = 0x0001;




在onCreate裡面


               // 跑很久的工作,必須開另一個thread處理
                new Thread() {
                    @Override
                    public void run() {
                        super.run();
        //...很重的工作
        //...
        //...完成後發出訊息
                        Message m = new Message();
                        m.what = UPDATE_SETTING_SUCCESS;

String obj = "datassss";//如果要傳遞參數 加入這段
m=handler.obtainMessage(1,obj);//傳遞參數

                        handler.sendMessage(m);
                    }
                }.start();
            }
        });
    }
  class MyHandler extends Handler {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case UPDATE_SETTING_SUCCESS:
String MsgString = (String)msg.obj;//接收參數
                myEditText.setText(MsgString+"ok!!");  //處理工作
                break;
            }
            super.handleMessage(msg);
        }
    }

2012年10月4日 星期四

Android : How to get gateway and subnet mask details in Android?


from
http://stackoverflow.com/questions/5387036/how-to-get-gateway-and-subnet-mask-details-in-android-programmatically

這個需要 2.3以上 http://www.programmer-club.com/ShowSameTitleN/java/13615.html


這種資訊最完整



全區域變數宣告

  public String   s_dns1 ;
   public String   s_dns2;  
   public String   s_gateway;
   public String   s_ipAddress;  
   public String   s_leaseDuration;  
   public String   s_netmask;
   public String   s_serverAddress;
    DhcpInfo d;
    WifiManager wifii;
 

{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{

wifii= (WifiManager) getSystemService(Context.WIFI_SERVICE);
       d=wifii.getDhcpInfo();

       List_IP.add("DNS 1: "+intToIp(d.dns1));
       List_IP.add("DNS 2: "+intToIp(d.dns2));  
       List_IP.add("Default Gateway: "+intToIp(d.gateway));  
       List_IP.add("IP Address: "+intToIp(d.ipAddress));
       List_IP.add("Lease Time: "+intToIp(d.leaseDuration));  
       List_IP.add("Subnet Mask: "+intToIp(d.netmask));  
       List_IP.add("Server IP: "+intToIp(d.serverAddress));


     public String intToIp(int i) {
      return ( i & 0xFF) + "." +
      ((i >> 8 ) & 0xFF) + "." +
           ((i >> 16 ) & 0xFF) + "." +
           ((i >> 24 ) & 0xFF );
    }





=====================================================
或是這種 簡易一點



InetAddress myIP = null;
try{
 
Log.i("1~~~",java.net.InetAddress.getLocalHost().getHostAddress());
 
 
   Enumeration ifE=NetworkInterface.getNetworkInterfaces();
   while(ifE.hasMoreElements()){
Enumeration addrE=((NetworkInterface)ifE.nextElement()).getInetAddresses();
while(addrE.hasMoreElements())
{

Log.i("2~~~","addrs:"+((InetAddress)addrE.nextElement()).getHostAddress());
}
   }

 
 }catch( Exception e) {
 Log.i("3~~~",e+"");
 }




更簡單點


        InetAddress myComputer = null;

try {
myComputer = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
        //System.out.println(myComputer.getHostAddress());

java 資料型態轉換 String.valueOf()


http://hsinichi.pixnet.net/blog/post/5317015-ja...........



String 類別中已經提供了將基本資料型態轉換成 String 的 static 方法
也就是 String.valueOf() 這個參數多載的方法。

有下列幾種:
String.valueOf(boolean b) : 將 boolean 變數 b 轉換成字串
String.valueOf(char c) : 將 char 變數 c 轉換成字串
String.valueOf(char[] data) : 將 char 陣列 data 轉換成字串
String.valueOf(char[] data, int offset, int count) :

將 char 陣列 data 中 由 data[offset] 開始取 count 個元素 轉換成字串
String.valueOf(double d) : 將 double 變數 d 轉換成字串
String.valueOf(float f) : 將 float 變數 f 轉換成字串
String.valueOf(int i) : 將 int 變數 i 轉換成字串
String.valueOf(long l) : 將 long 變數 l 轉換成字串
String.valueOf(Object obj) : 將 obj 物件轉換成 字串, 等於 obj.toString()

用法就如:

int i = 10;
String str = String.valueOf(i);
這時候 str 的值"10"

2. String 轉換成 數字 的基本資料型態

要將 String 轉換成基本資料型態轉
大多需要使用基本資料型態的包裝類別

String 轉換成 byte
可以使用 Byte.parseByte(String s)
這類的方法如果無法將 s 分析 則會丟出 NumberFormatException

byte :
Byte.parseByte(String s) : 將 s 轉換成 byte
Byte.parseByte(String s, int radix) : 以 radix 為基底 將 s 轉換為 byte
比如說 Byte.parseByte("11", 16) 會得到 17

double :
Double.parseDouble(String s) : 將 s 轉換成 double

float :
Double.parseFloat(String s) : 將 s 轉換成 float

int :
Integer.parseInt(String s) : 將 s 轉換成 int

long :
Long.parseLong(String s) : 將 s 轉換成 long

用法如:
try
{
String str = "1234"; int a = Integer.parseInt(str);
}
catch (NumberFormatException e)
{
System.out.println(" parse int error!! " + e);
}

android ListView 介紹與使用



FROM

http://blog.joomla.org.tw/android/178-ListV*******

http://rayleung.iteye.com/blog/540423

http://www.vogella.com/articles/AndroidListView/article.html

http://hi.baidu.com/ljlkings/item/afb3b4c2b2a96e66f7c95dac







常用的的這些樣式如下所列:
android.R.layout.simple_list_item_1:一行text
android.R.layout.simple_list_item_2:一行text較大,一行text較小
android.R.layout.simple_list_item_single_choice:單選
android.R.layout.simple_list_item_multiple_choice:多選按鈕
android.R.layout.simple_list_item_checked:勾選盒



public class ListDemo3 extends ListActivity {
 /** Called when the activity is first created. */
 ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
 private SimpleAdapter adapter;

 @Override
 public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);

 //把資料加入ArrayList中
 for(int i=0; i<mPlaces.length; i++){
 HashMap<String,String> item = new HashMap<String,String>();
 item.put( "food", mFoods[i]);
 item.put( "place",mPlaces[i] );
 list.add( item );
 }

 //新增SimpleAdapter
 adapter = new SimpleAdapter(
 this,
 list,
 android.R.layout.simple_list_item_2,
 new String[] { "food","place" },
 new int[] { android.R.id.text1, android.R.id.text2 } );

 //ListActivity設定adapter
 setListAdapter( adapter );

 //啟用按鍵過濾功能,這兩行資料都會進行過濾
 getListView().setTextFilterEnabled(true);
 }

 private static final String[] mPlaces = new String[] {
 "台北市", "新北市", "台南市", "高雄市", "苗粟縣",
 "台北市", "新北市", "台南市", "高雄市", "苗粟縣",
 "台北市", "新北市", "台南市", "高雄市", "苗粟縣",
 "台北市", "新北市", "台南市", "高雄市", "苗粟縣",
 "台北市", "新北市", "台南市", "高雄市", "苗粟縣",
 "台北市", "新北市", "789", "cde", "abc"
 };

 private static final String[] mFoods = new String[] {
 "大餅包小餅", "蚵仔煎", "東山鴨頭", "臭豆腐", "潤餅",
 "豆花", "青蛙下蛋","豬血糕", "大腸包小腸", "鹹水雞",
 "烤香腸","車輪餅","珍珠奶茶","鹹酥雞","大熱狗",
 "炸雞排","山豬肉","花生冰","剉冰","水果冰",
 "包心粉圓","排骨酥","沙茶魷魚","章魚燒","度小月",
 "aaa","abc","bbb","bcd","123"
 };
}

Android 使用 ListView 和 ListActivity



FROM

http://changyy.pixnet.net/blog/post/30715882-a.......

http://blog.joomla.org.tw/android/.......








對 HTML 來說,所謂的 ListView 大概稱得上網頁上常看到的 ul、ol、dt 或是 table 吧!這東西真的是萬用的好工具,最直觀的排版,正所謂規規矩矩,不美也不會太醜。最近我終於開始在 Android 上使用這個東西了,光這功能就能讓你完成九成的工作了。更多 ListView 跟 ListActivity 的資訊,請參考官網的介紹,這邊僅簡易的筆記。

在 MyActivity 上呼叫自訂的 MyListActivity 的方式:

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Intent mIntent = new Intent();
        mIntent.setClass(this, MyListActivity.class);
        startActivity( mIntent );
}

在 MyListActivity 中,使用簡易的排版。範例一,使用系統內建 android.R.layout.simple_list_item_1 排版:



 程式碼:

package com.example.study;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class MyListActivity extends ListActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                String[] values = new String[] { "Android", "iPhone", "WindowsMobile", "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X", "Linux", "OS/2" };
                setListAdapter(
                        new ArrayAdapter<String>(
                                this,
                                android.R.layout.simple_list_item_1,
                                values)
                );
        }
}

範例二,使用系統內建 android.R.layout.simple_list_item_2 排版:



程式碼:

package com.example.study;

import android.app.ListActivity;
import android.os.Bundle;
import java.util.ArrayList;
import java.util.HashMap;
import android.widget.SimpleAdapter;

public class ProgramListActivity extends ListActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                final String ID_TITLE = "TITLE", ID_SUBTITLE = "SUBTITLE";

                ArrayList<HashMap<String,String>> myListData = new ArrayList<HashMap<String,String>>();
                String[] titles = new String[]{ "Title1" , "Title2", "Title3" };
                String[] subtitles = new String[]{ "SubTitle1" , "SubTitle2", "SubTitle3" };

                for( int i=0;i<titles.length ; ++i) {
                        HashMap<String,String> item = new HashMap<String,String>();
                        item.put(ID_TITLE,titles[i]);
                        item.put(ID_SUBTITLE,subtitles[i]);
                        myListData.add(item);
                }

                setListAdapter( new SimpleAdapter(
                        this,
                        myListData,
                        android.R.layout.simple_list_item_2,
                        new String[] { ID_TITLE, ID_SUBTITLE },
                        new int[] { android.R.id.text1, android.R.id.text2 } )
                );
        }
}

其中 android.R.layout.simple_list_item_1.xml 和 android.R.layout.simple_list_item_2.xml 的資料,可以查閱自己用的 SDK 囉,例如使用 Android 2.2 時,在 Eclipse 的 Package Explorer 中,可以瀏覽 Android 2.2 -> android.jar -> res.layout 並在裡頭找到。

此處提的範例都是 ListActivity 的,如果你在你的 Activity 的 layout 上擺了一個 ListView 的話,那只需要先用 findViewById 後,就可以仿照 ListActivity 把資料餵進去,如:

ListView mListView = (ListView)findViewById(R.id.listView1);
if( mListView != null ) {
        mListView.setAdapter(
                new SimpleAdapter(
                        this,
                        mDataSource ,
                        android.R.layout.simple_list_item_2,
                        new String[] { ID_TITLE, ID_DETAL },
                        new int[] { android.R.id.text1, android.R.id.text2 }
                )
        );
}

2012年10月3日 星期三

Android Layout XML屬性




Layout對於迅速的搭建界面和提高界面在不同分辨率的屏幕上的適應性具有很大的作用。這裡簡要介紹Android的Layout和研究一下它的實現。
Android有Layout:FrameLayout,LinearLayout,TableLayout,RelativeLayout,AbsoluteLayout。
放入Layout中進行排布的View的XML屬性:
1.幾種Layout中Item所共有的XML屬性:
(1)layout_width
(2)layout_height
注: (1)和(2)用來確定放入Layout中的View的寬度和高度:它們的可能取值為fill_parent,wrap_content或者固定的像素值。
(3)layout_marginLeft --->paddingLeft
(4)layout_marginTop --->paddingTop
(5)layout_marginRight --->paddingRight
(6)layout_marginBottom --->paddingBottom
(補)layout_margin --->padding
 注:(3)(4)(5)(6)是放入Layout中的View期望它能夠和Layout的邊界或者其他View之間能夠相距一段距離。
(7)layout_gravity
注:(7)用來確定View在Layout中的停靠位置。
FrameLayout是最簡單的Layout,就只具有這些屬性。
LinearLayout還會有:
(8)layout_weight
注: (8)用於在LinearLayout中把所有子View排布之後的剩餘空間按照它們的layout_weight分配給各個擁有這個屬性的View。
TableLayout的行TableRow是一個橫向的(horizo​​ntal)的LinearLayout
RelativeLayout有16個align相關的XML屬性:
(9 )layout_alignParentBottom 當前控件低端與父控件的低端對齊(重合)
(10)layout_alignParentLeft 當前控件左端與父控件的左端對齊(重合)
(11)layout_alignParentRight 當前控件右端與父控件的右端對齊(重合)
(12)layout_alignParentTop 當前控件上端與父控件的上端對齊(重合)
(13)layout_centerHorizo​​ntal 當前控件位於父控件的橫向中間位置(水平方向上的中間)
(14)layout_centerInParent 當前控件位於父控件的縱橫向中間位置(垂直方向上的中間)
(15)layout_centerVertical 當前控件位於父控件的縱向中間位置(平面上的正中間)
(16)layout_above 使當前控件位於給出id控件的上方
(17)layout_below 使當前控件位於給出id控件的下方
(18)layout_toLeftOf 使當前控件位於給出id控件的左側
(19)layout_toRightOf 使當前控件位於給出id控件的右側
(20)layout_alignBottom 使當前控件與給出id控件的底部部重合(注意可用和給出id控件來對齊)
(21)layout_alignLeft 使當前控件與給出id控件的左邊重合
(22)layout_alignRight 使當前控件與給出id控件的右邊重合
(23)layout_alignTop 使當前控件與給出id控件的頂部重合
(24)layout_alignBaseline 使當前控件的BaseLine與給出id控件t的BaseLine重合,這個主要用於Label或者其他包含文本的widgets。
 注:(9)到(24)用來確定RelativeLayout中的View相對於Layout或者Layout中的其他View的位置。
++++++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++
根據Android的文檔,Android會對Layou和View嵌套組成的這棵樹進行2次遍歷,一次是measure調用,用來確定Layout或者View的大小;一次是layout調用,用來確定Layout或者view的位置。當然後來我自己的山寨實現把這2次調用合併到了一起。那就是Layout在排布之前都對自己進行measure一次,然後對View遞歸調用Layout方法。這樣子的大小肯定是確定了的。然後用確定了的大小來使用gravity或者align屬性來定位,使用margin來調整位置。
++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++
補充:
1.android:paddingLeft與android:layout_marginLeft的區別:
      padding margin都是邊距的含義,關鍵問題得明白是什麼相對什麼的邊距.
      padding是控件的內容相對控件的邊緣的邊距.
      layout_margin是控件邊緣相對父空間的邊距.
2.android gravity和layout_gravity區別
android:gravity 屬性是對該view 內容的限定.比如一個button 上面的text. 你可以設置該text 在view的靠左,靠右等位置.該屬性就乾了這個.
      android:layout_gravity是用來設置該view相對與起父view 的位置.比如一個button 在linearlayout裡,你想把該button放在靠左靠右等位置就可以通過該屬性設置.
這樣就解釋了,有什麼我們弄個最外佈局,然後裡麵包了幾個佈局,如果要使這幾個佈局都靠底,就可以在最外佈局的屬性裡設置androi:gravity="botton"因為gravity是對裡面的內容起作用.


android 修改app程式名稱


http://blog.longwin.com.tw/2010/12/android-dev-app-name-2010/


建立完一個android專案

之後想要修改app名稱 該如何做?



*/res/values/strings.xml
<string name="wtf">應用程式名稱</string>

找到上述標籤, 修改 "名稱" 即可.

android 自訂text類 輸入IP用


   自訂一個專門輸入ip用的text



 <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_weight="3"
        android:gravity="left"
        android:text="IP位址"
        android:textSize="18sp" />

    <LinearLayout
        style="@android:style/Widget.EditText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="22dp"
        android:layout_weight="1"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/test1"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:gravity="center"
            android:inputType="numberDecimal"
            android:maxLength="3"
            android:textSize="18sp" >

            <requestFocus />
        </EditText>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="."
          />

        <EditText
            android:id="@+id/test2"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:gravity="center"
            android:inputType="numberDecimal"
            android:maxLength="3"
            android:textSize="18sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="."
             />

        <EditText
            android:id="@+id/test3"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:gravity="center"
            android:inputType="numberDecimal"
            android:maxLength="3"
            android:textSize="18sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="."
            />

        <EditText
            android:id="@+id/test4"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:gravity="center"
            android:inputType="numberDecimal"
            android:maxLength="3"
            android:textSize="18sp" />
    </LinearLayout>



from http://www.eoeandroid.com/thread-185524-1-1.html

2012年10月2日 星期二

android 解決 模擬器重複開啟 & 程式灌不盡去的問題



ERROR: the user data image is used by another emulator. aborting



真是惱人的問題

跟這問題糾纏了很久......


有時候模擬器正常開啟

但是就是無法run寫好的程式

Window->Show View->找到Devices->Reset adb
中斷連線


然後重新run看看模擬器~


這動作就是中斷目前apk與模擬器的連接~似乎是之前模擬器沒有正常關閉 ....




參考http://blog.muradi.net/blogs/index.php/2010/12/01/error-the-user-data-image-is-used-by-ano






================================================


去年的問題

最少卡了兩個禮拜吧

弄到現在終於解決了


用xp 根本不用做參數設定

用這個錯誤訊息" ERROR: the user data image is used by another emulator. aborting"

終於把hello world 完成


解決的辦法就是
"沒有正常關閉導致的,刪除android-sdk-windows\.android\avd\對於版本\下的以.lock結尾的文件夾就行"


資料夾就在C:\Documents and Settings\@user@\.android

The method ???? of type Fundamentals must override a superclass

 
"......The method onAccuracyChanged(Sensor, int) of type Fundamentals must override a superclass......" 
"......The method onClick(View) of type new View.OnClickListener(){} must override a superclass...... "
“......The method onSensorChanged(SensorEvent) of type Fundamentals must override a superclass......”




解決辦法:

是JDK版本問題,將Project->Properties->Java Compiler->Compilier compiance level,重啟,就沒有錯誤提示了。

2012年9月27日 星期四

Android 寫好的程式 灌不進 模擬器 !?

因為找工作.....

最近又開始摸索app摟


安裝過程都ok

更新sdk超級久........

開了模擬器 測試一下hello world

結果 程式一直灌不進 模擬器

模擬器 也一直重複打開

不斷的濕敗......

去年入門的時候也是遇到這問題  弄到快發瘋!!!!!


整理出一些方法來 解決這問題.....


* 開啟"工作管理員" 將adb.exe關閉
重開Eclipse

* 執行cmd
 cd到Android SDK Tools資料夾
輸入指令 adb kill-server
然後 輸入adb start-server
http://www.dotblogs.com.tw/jgame2012/archive/2012/04/06/71311.aspx



其他方法 http://kaihueinote.blogspot.tw/2012/08/android.html
 

MangoHost Copyright © 2009 Cookiez is Designed by Ipietoon for Free Blogger Template