2015年2月4日 星期三

網路資訊連結

1.Android滑動效果入門篇
http://blog.csdn.net/ithomer/article/details/7420567

2.內部類總結
http://blog.csdn.net/hikvision_java_gyh/article/details/8964155

3.Android HttpClient用法
http://blog.csdn.net/qq_695538007/article/details/43500713

4.Android關發資源
http://www.csdn.net/tag/android

5.人臉檢測
http://blog.csdn.net/L_serein/article/details/16902255

6.笨方法學ruby
http://lrthw.github.io

7.演算法
http://openhome.cc/Gossip/AlgorithmGossip/

2015年2月3日 星期二

android APP 填加 adsense 廣告

情境:
已完成APP的開發(該APP至少要有一個view Activity )

目標:
在APP內加入adsense廣告

準備工作:
1.申請google帳號
2.申請admob
3.申請paypal(非必需,日後若要領取收益可以使用paypal轉帳減少交易費用)
4.在有google帳號內的手機上下載 adsense(非必要,但建議下載,可隨時觀看目前廣告的瀏覽次數及收益)

作業流程:
1.先將APP上架(沒錯要先上架)
2.再至admob內取得上架APP的廣告商 ID
3.再專案內引用 google-play-server-lib
4.再欲想顯示的activity內加如下列程式碼
import com.google.android.gms.ads.*;
public class BannerExample extends Activity {
  private AdView adView;
private final String MY_AD_UNIT_ID ="請輸入在admob內取得的ID";

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

    // 建立 adView。
    adView = new AdView(this);
    adView.setAdUnitId(MY_AD_UNIT_ID);
    adView.setAdSize(AdSize.BANNER);

    // 假設 LinearLayout 已獲得 android:id="@+id/mainLayout" 屬性,
    // 查詢 LinearLayout。
    LinearLayout layout = (LinearLayout)findViewById(R.id.mainLayout);

    // 在其中加入 adView。
    layout.addView(adView);

    // 啟動一般請求。
    AdRequest adRequest = new AdRequest.Builder().build();

    // 以廣告請求載入 adView。
    adView.loadAd(adRequest);
  }

  @Override
  public void onPause() {
    adView.pause();
    super.onPause();
  }

  @Override
  public void onResume() {
    super.onResume();
    adView.resume();
  }

  @Override
  public void onDestroy() {
    adView.destroy();
    super.onDestroy();
  }
}
5.再 AndroidManifest.xml 加入下列請求(藍色部份)
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name">
        <activity android:name="com.google.android.gms.ads.AdActivity"
                  android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
    <meta-data android:name="com.google.android.gms.version"
               android:value="@integer/google_play_services_version" />
    </application>

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>


2014年11月17日 星期一

連線網頁,並取得網頁資訊範例



public class MainActivity extends Activity
{
private LinearLayout ll;
private Button btngo;

private TextView tv;
private ScrollView sv ;

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ll = (LinearLayout) findViewById(R.id.LinearLayout1);
sv = new ScrollView(this);

tv = new TextView(this);
sv.addView(tv);

ll.addView(sv);
btngo = new Button(this);
ll.addView(btngo);
// ------------------------------------------
btngo.setText("go");
btngo.setOnClickListener(new Button.OnClickListener()
{

@Override
public void onClick(View v)
{
// TODO Auto-generated method stub
                                //需使用Thread來執行網頁的存取需求,否則會產生錯誤
new Thread(new Runnable()
{

@Override
public void run()
{
// TODO Auto-generated method stub
connectHttp();
}
}).start();
}
});
// ------------------------------------------

}

private void connectHttp()
{
String url = "https://tw.stock.yahoo.com/q/q?s=2330"; //欲存取的網頁路徑
String output = null;
HttpPost request = new HttpPost(url);

Bundle b = new Bundle();
Message msg = new Message();

// 欺騙網站是pc傳送訊息
request.addHeader("User-Agent",
"Mozilla/5.0 (compatible; MSIE 6.0; Windows NT 5.1 Chrome/17.0.963.56");
List<NameValuePair> params = new ArrayList<NameValuePair>(); // 放參數
params.add(new BasicNameValuePair("s", "2330"));// 放參數
try
{
request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
HttpResponse httpResponse = new DefaultHttpClient()
.execute(request);

if (httpResponse.getStatusLine().getStatusCode() == 200)
{
output = EntityUtils.toString(httpResponse.getEntity());

b.putString("value", output);
msg.setData(b);
// tv.setText(output);
handlerGS.sendMessage(msg);
}

} 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();
}

}

Handler handlerGS = new Handler()
{

@Override
public void handleMessage(Message msg)
{
// TODO Auto-generated method stub
super.handleMessage(msg);
Bundle b = msg.getData() ;
tv.setText(b.getString("value"));

}

};
說明:關鍵在存取網路資訊時需使用Thread發送需求,否則會產生錯誤

2014年10月30日 星期四

Android實作webView元件

Android實作webView元件

程式碼:
public class MainActivity extends Activity {
     @Override
     public void onBackPressed() {
         // TODO Auto-generated method stub
         // mwv.goBack(); //回上一頁
         // super.onBackPressed(); //離開
         if (mwv.canGoBack())
              mwv.goBack();
         else
              System.exit(0);
     }
     private WebView mwv;
     private ProgressDialog pd;
     private Button mbtn;
     private Button mbtn2;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         mwv = (WebView) findViewById(R.id.webView1);
         // 瀏覽網路需要權限 android.permission.INTERNET
         // String url = "http://www.tcfst.org.tw";
         // mwv.loadUrl(url);
         mwv.setWebViewClient(new myvebviewclient()); // 設定 web client
         pd = new ProgressDialog(this);// 設定progress bar
         mbtn = (Button) findViewById(R.id.button1);
         mbtn.setOnClickListener(new Button.OnClickListener() {
              @Override
              public void onClick(View v) {
                  // TODO Auto-generated method stub
                  Log.e("but1", "onClick");
                  pd.setMessage("Loading...");
                  pd.setCanceledOnTouchOutside(false); // 設定 使用者無法 按到旁邊而關掉
                  pd.show();
                  String url = "http://tw.yahoo.com";
                  // String url = "file:///android_asset/demo.html";
                  // //瀏覽使用設定的html檔案
                  mwv.loadUrl(url);
              }
         });
     mbtn2 = (Button) findViewById(R.id.button2);
         mbtn2.setOnClickListener(new Button.OnClickListener() {
              @Override
              public void onClick(View v) {
                  // TODO Auto-generated method stub
                  Log.e("but2", "onClick");
                  pd.setMessage("Loading...");
                  pd.setCanceledOnTouchOutside(false); // 設定 使用者無法 按到旁邊而關掉
                  pd.show();
                  // String url = "http://tw.yahoo.com";
                  String url = "file:///android_asset/demo.html"; // 瀏覽使用設定的html檔案
                  mwv.loadUrl(url);
              }
         });
     }
private class myvebviewclient extends WebViewClient {
         @Override
         public boolean shouldOverrideUrlLoading(WebView view, String url) {
              // TODO Auto-generated method stub
              view.loadUrl(url);
              return true;
         }
         @Override
         public void onPageFinished(WebView view, String url) {
              // TODO Auto-generated method stub
              // super.onPageFinished(view, url);
              if (pd.isShowing())
                  pd.dismiss();
         }
     }
}
說明:
1.  需開啟網路使用權限; <uses-permission android:name="android.permission.INTERNET"/>
2.      需建立一個繼承WebViewClient的類別,使用該類別來當使用者存取網址及webView的中介
3.      點選Button1Button2會各自開啟兩個不同的網頁,並將其呈現於webView

4.      若不使用WebViewClient則系統會詢問使用者,要使用目前系統上的哪一個瀏覽器來開啟網頁

利用intent呼叫Activity及傳送資料

利用intent呼叫Activity及傳送資料


 
Activity1程式碼

public class Activity1 extends Activity
{

     private Button bt1;

     @Override
     protected void onCreate(Bundle savedInstanceState)
     {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_activity1);
       
        
         bt1 = (Button) findViewById(R.id.button1);
         bt1.setOnClickListener(new Button.OnClickListener()
         {

              @Override
              public void onClick(View v)
              {
                  // TODO Auto-generated method stub
                  Intent it = new Intent();
                  it.setClass(Activity1.this, Activity2.class);
                  it.putExtra("pass", "ispassword");
                  it.putExtra("user", "ZCFang");

                  startActivity(it);
              }
         });
     }

}

說明:
1.使用intent.setClass設定欲開啟的Activity
2.使用intent.putExtra 放入欲傳送的資訊,若資料量很大也可以選擇使用Bundle物件加入資訊,再藉由intent傳送
3.使用startActivity傳送intent並開啟指定的Activity

Activity2程式碼

public class Activity2 extends Activity
{
     private Button bt2;

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

        
         Bundle b = getIntent().getExtras();

         String str = b.getString("user") + " : " + b.getString("pass");
         Toast.makeText(this, str, Toast.LENGTH_LONG).show();
         bt2 = (Button) findViewById(R.id.button2);
         bt2.setOnClickListener(new Button.OnClickListener()
         {

              @Override
              public void onClick(View v)
              {
                  // TODO Auto-generated method stub
                  Intent it = new Intent();
                  it.setClass(Activity2.this, Activity1.class);
                  startActivity(it);

              }
         });
     }

}
說明:
1.使用Bundle接收使用者傳送過來的資訊
2.再依資料型別從Bundle物件中取出資料