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

2013年11月13日 星期三

[TQC+ Android]判斷地標所屬區域_308

1. 下載 google APIs 7 >> 專案右鍵 >> properties >> Android google APIs 7  >> AVD模擬器google APIs 開啟
2.  Application add (Users Liberary) 選 com.google.android.maps
3. 我們增加了android.permission.ACCESS_FINE_LOCATION的權限,主要是GPS的位置提供
除了FINE另外還有COARSE,可以透過其他的服務來取得位置(network: 3G or Wifi)

GDD03.java - Activity主體
package COM.TQC.GDD03;

import com.google.android.maps.GeoPoint;

import android.app.Activity;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;

public class GDD03 extends Activity implements LocationListener
{
  public String strLocationPrivider = "";
  public TextView mTextView01;
  LocationManager lm;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    lm = (LocationManager) getSystemService(LOCATION_SERVICE);
    
    mTextView01 = (TextView)findViewById(R.id.myTextView1);
    getLocationPrivider();
  }
  
  public void getLocationPrivider()
  {
    try
    {
      Criteria mCriteria01 = new Criteria();
      mCriteria01.setAccuracy(Criteria.ACCURACY_FINE);
      mCriteria01.setAltitudeRequired(false);
      mCriteria01.setBearingRequired(false);
      mCriteria01.setCostAllowed(true);
      mCriteria01.setPowerRequirement(Criteria.POWER_LOW);
    }
    catch(Exception e)
    {
      e.printStackTrace();
    }
  }

@Override
protected void onResume() {
 // TODO Auto-generated method stub
 super.onResume();
 strLocationPrivider = lm.getBestProvider(new Criteria(), true);
 lm.requestLocationUpdates(strLocationPrivider, 5000, 0, this);
 Location l = lm.getLastKnownLocation(strLocationPrivider);
 if(l != null )
  onLocationChanged(l);
}

@Override
public void onLocationChanged(Location location) {
 // TODO Auto-generated method stub
 double la = location.getLatitude()*1E6, lo= location.getLongitude()*1E6;
 GeoPoint gp = new GeoPoint((int)la, (int)lo);
 if(gp.getLatitudeE6()/1E6 <= 25.051578 && gp.getLatitudeE6()/1E6 >= 25.051201 
   && gp.getLongitudeE6()/1E6 >= 121.549197 && gp.getLongitudeE6()/1E6 <= 121.549666)
  mTextView01.setText(getString(R.string.str_inside));
 else
  mTextView01.setText(getString(R.string.str_outside));
}

@Override
public void onProviderDisabled(String provider) {
 // TODO Auto-generated method stub
 
}

@Override
public void onProviderEnabled(String provider) {
 // TODO Auto-generated method stub
 
}

@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
 // TODO Auto-generated method stub
 
}
}

2013年10月23日 星期三

[TQC+ Android]SQLite 與 MENU 作業_204

Android 2.1 API 7 版本原始題目載點:https://db.tt/BXZjHsRH

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/TQC204.pdf

GDD02.java - Activity主體
package COM.TQC.GDD02;

import android.app.Activity;
import android.database.Cursor;
import android.database.sqlite.SQLiteCursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class GDD02 extends Activity
{
  private mySQLiteOpenHelper gaaSQLiteOpenHelper;
  private Cursor myCursor;
  private ListView myListView;
  private EditText myEditText;
  private int _id;
  protected final static int MENU_ADD = Menu.FIRST;
  protected final static int MENU_EDIT = Menu.FIRST + 1;
  protected final static int MENU_DELETE = Menu.FIRST + 2;

  @Override
  public boolean onOptionsItemSelected(MenuItem item)
  {
    super.onOptionsItemSelected(item);
    switch (item.getItemId())
    {
      case MENU_ADD:
        this.addTodo();
        break;
      case MENU_EDIT:
        this.editTodo();
        break;
      case MENU_DELETE:
        this.deleteTodo();
        break;
    }
    return true;
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu)
  {
    super.onCreateOptionsMenu(menu);
    //first
    menu.add(0, MENU_ADD, 0, getString(R.string.strAddButton));
    menu.add(0, MENU_EDIT, 0, getString(R.string.strEditButton));
    menu.add(0, MENU_DELETE, 0, getString(R.string.strDeleteButton));
    //
    return true;
  }

  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    myListView = (ListView) this.findViewById(R.id.myListView);
    myEditText = (EditText) this.findViewById(R.id.myEditText);

    gaaSQLiteOpenHelper = new mySQLiteOpenHelper(this);
    
    myCursor = gaaSQLiteOpenHelper.select();

    
    SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list,
        myCursor, new String[]
        { gaaSQLiteOpenHelper.FIELD_TEXT }, new int[]
        { R.id.listTextView1 });
    myListView.setAdapter(adapter);

    
    myListView.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {

      
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
          long arg3)
      {
        
        myCursor.moveToPosition(arg2);
        
        _id = myCursor.getInt(0);
        
        myEditText.setText(myCursor.getString(1));
      }

    });
   

  }

  private void addTodo()
  {
   //second call  gaaSQLiteOpenHelper SQL insert method
   gaaSQLiteOpenHelper.insert(myEditText.getText().toString());
   myCursor.requery();
   
 //  
  }

  private void editTodo()
  {
    
 //second call  gaaSQLiteOpenHelper SQL update method
   gaaSQLiteOpenHelper.update(_id, myEditText.getText().toString());
   myCursor.requery();
 //
   
  }

  private void deleteTodo()
  {
 //second call  gaaSQLiteOpenHelper SQL delete method
   gaaSQLiteOpenHelper.delete(_id);
   myCursor.requery();
 //
   
  }
}


mySQLiteOpenHelper
package COM.TQC.GDD02;

import java.nio.charset.CodingErrorAction;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class mySQLiteOpenHelper extends SQLiteOpenHelper
{
  private final static String DATABASE_NAME = "todo_db";
  private final static int DATABASE_VERSION = 1;
  private final static String TABLE_NAME = "todo_table";
  public final static String FIELD_id = "_id";
  public final static String FIELD_TEXT = "todo_text";

  public mySQLiteOpenHelper(Context context)
  {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
  }

  @Override
  public void onCreate(SQLiteDatabase db)
  {
    
    String sql = "CREATE TABLE " + TABLE_NAME + " (" + FIELD_id
        + " INTEGER primary key autoincrement, " + " " + FIELD_TEXT + " text)";
    db.execSQL(sql);
  }

  @Override
  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
  {
    String sql = "DROP TABLE IF EXISTS " + TABLE_NAME;
    db.execSQL(sql);
    onCreate(db);
  }

  public Cursor select()
  {
    SQLiteDatabase db = this.getReadableDatabase();
    Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
    return cursor;
  }

  public void insert(String text)
  {
    SQLiteDatabase db = this.getWritableDatabase();
    // add date
    ContentValues cv = new ContentValues();
    cv.put(FIELD_TEXT, text);
    db.insert(TABLE_NAME, null, cv);
    //
    
  }

  public void delete(int id)
  {
    SQLiteDatabase db = this.getWritableDatabase();
    //
    String where = FIELD_id + " = " + id;
    // delete date
    db.delete(TABLE_NAME, where, null);
    //
    
  }

  public void update(int id, String text)
  {
    SQLiteDatabase db = this.getWritableDatabase();
    //
    String where = FIELD_id + " = " + id;
    // update date
    ContentValues cv = new ContentValues();
    cv.put(FIELD_TEXT, text);
    
    db.update(TABLE_NAME, cv, where, null);
    
    //
    
  }
}

以下圖片為android程式建立的database所在位置

2013年9月2日 星期一

[TQC+ Android]題庫、環境設置及eclipse使用技巧

Android JDK 及 eclipse安裝設置參考
http://sofun.tw/android-eclipse/

Android 題目以及題庫掃描檔案連結
https://db.tt/4ylbqp9g

1.寫作技巧記住函數開頭後面只要用點的( . )都能夠做出來,只要變數名稱沒取錯
2.當打出部分函數時,可以使用快捷鍵( alt  +  / )可以選擇完整函數(如doc打指令Tab)
3.如果需要import大量變數可使用快捷鍵(alt + shift + o)
3.對@Override 之上空白 按右鍵Source > Override/Implement Method 有許多實作方法
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
4. new部分可用View. 出 OnClickListener() 在改回Button(不更改也可執行,以防分數被扣)
也可使用new Button.OnClickListener(){} 加上小括號、中括號後實做
 Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View v)
      {

5.當有兩個java黨互動或接收簡訊等action都需要去AndroidManifest.xml設置權限及Action
通常會用到intent時都需要
6.新建專案 四大步驟
第一步驟: src 建立 .java 
第二步驟: 建立 onCreate (第3點) (連結第三步驟 setContentView(R.layout.XXXXX);  layout
第三步驟: layout 建立 .xml檔案
第四步驟: androidMainifest.xml 啟動 action

Android 台灣開發者社群

陳翰瑀‎
分享一下我個人常用的Eclipse快捷鍵

alt + / 程式碼自動補全/提示
alt + shift + z Suround with(ex.try catch block)

tab 縮排
shift + tab 反縮排

ctrl + f 搜尋
ctrl + l 直接跳到輸入的行數
ctrl + a 全選
shift + home 從後往前選一排
shift + end 從前往後選一排

ctrl + x 剪下
ctrl + c 複製
ctrl + v 貼上
ctrl + / mark(備註)/反mark(反備註)
ctrl + s 存檔

ctrl + shift +f 自動排版
ctrl + shift +o 自動import
ctrl + shift +r 尋找並開啟檔案

另外還有範圍較大的 工作區搜尋
ctrl + h 我都使用file search比較多(找所有檔案內相同的字串)

特別設定
http://fahdshariff.blogspot.tw/2011/08/eclipse-default-to-file-search-tab-in.html?m=1

蔡昇哲
ctrl + w, 關單一檔案
ctrl + i, 單行排版
ctrl + alt + s, source (主要常用在override)
ctrl + alt + t, refactor
ctrl + q, 跳到最後修改處
ctrl + [; ctrl + ] 在跳行上很好用

Rick Wu
反白某變數 ctrl+k 逐一尋找該變數
反白某函數/類別/layout 按f3或ctrl按住+滑鼠左鍵 可跳至該函數/類別/xml宣告的地方

[TQC+ Android]接收SMS_302

Android 2.1 API 7 版本原始題目載點:http://db.tt/WiNMXEQ6

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/302.png

GDD03.SMSreceiver - BroadcastReceiver
先在AndroidManifest.xml設定user permission,在設定activity和receive
package COM.TQC.GDD03;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;

public class SMSreceiver extends BroadcastReceiver {
    
    public void onReceive(Context context, Intent intent) {
        if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED")) {
            Intent mainIntent = new Intent(context, Image.class);
            mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(mainIntent);
        }
    }
}

[TQC+ Android]公尺與英呎轉換_202

Android 2.1 API 7 版本原始題目載點:http://db.tt/hHVh21bO

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/TQC202.pdf

GDD02.java - Activity主體
因為layout為線性排列所以擺放Button時,需要再選擇relation layout再擺放兩個Button
package COM.TQC.GDD02;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class GDD02 extends Activity implements OnClickListener{
    private TextView result;
    private EditText input_value;
    private Button submit01, submit02;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        result = (TextView) findViewById(R.id.result);
        input_value = (EditText) findViewById(R.id.input_value);
        submit01 = (Button) findViewById(R.id.submit01);
        submit02 = (Button) findViewById(R.id.submit02);
        
        submit01.setOnClickListener(this);
        submit02.setOnClickListener(this);
    }

    public void onClick(View v) {
        String r = input_value.getText().toString();
        
        if (v == submit01)
            r += ".0公尺 = " + String.format("%.2f", Double.parseDouble(r) * 3.28) + "英呎";
        else if (v == submit02)
            r += ".0英呎 = "+ String.format("%.2f", Double.parseDouble(r) * 0.3048) + "公尺";
        
        result.setText(r);
    }
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_reset:
            resetValue();
            break;
        }
        return true;
    }

    private void resetValue() {
        result.setText("");
        input_value.setText("");
    }
}

[TQC+ Android]動態密碼顯示_110

Android 2.1 API 7 版本原始題目載點:http://db.tt/7DRVeeKb

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/TQC110.pdf

GDD01.java - Activity主體
package COM.TQC.GDD01;

import android.app.Activity;
import android.os.Bundle;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;


public class GDD01 extends Activity {
 private EditText et;
 private CheckBox cb;
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    et = (EditText) findViewById(R.id.mPassword);
    cb = (CheckBox) findViewById(R.id.mCheck);
    
    cb.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener(){

  @Override
  public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
   // TODO Auto-generated method stub
   if(cb.isChecked()){
    et.setTransformationMethod(
                  HideReturnsTransformationMethod.getInstance());
   }else{
    et.setTransformationMethod(
                  PasswordTransformationMethod.getInstance());
   }
  }
     
    });
  }
}

2013年8月28日 星期三

[TQC+ Android]程式背景音樂_310

Android 2.1 API 7 版本原始題目載點:http://db.tt/87GSYroH

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/TQC310.pdf

GDD03.java - Activity主體
package COM.TQC.GDD03;

import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;

public class GDD03 extends Activity
{
 //宣告MediaPlayer類別來使用,記得Import
   private MediaPlayer m;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
  //建立物件實體於this,音樂檔的路徑為res\raw\light
    m = MediaPlayer.create(this, R.raw.light);
    //播放音樂
    m.start();
    //設定播放迴圈為true,即為循環播放
    m.setLooping(true);
  }
@Override
protected void onPause() {
 // TODO Auto-generated method stub
 super.onPause();
 //當重新開起app程式至onResume時,重設音樂播放
 m.reset();
}
}

[TQC+ Android]接收簡訊_304

Android 2.1 API 7 版本原始題目載點:http://db.tt/FV8IPpEf

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/304.png

AndroidManifest.xml設定
Permissions裡 "add" (User Permissions) Name = android.permission.RECEIVE_SMS
Application裡 "add" (Receiver) Name = GDA03_SM_Receiver 再 "add" Intent Filter 再 "add" (Action) Name =  android.provider.Telephony.SMS_RECEIVED

GDD03_SM_Receiver - BroadcastReceiver

package COM.TQC.GDD03 ;

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.widget.Toast;



public class GDD03_SM_Receiver extends BroadcastReceiver 
{ 
   
 
  
  @Override 
  public void onReceive(Context context, Intent intent) 
  { 
    // TODO Auto-generated method stub 
    
     String str="";
     Bundle bundle = intent.getExtras();
     Object[] pdus=(Object[])bundle.get("pdus");
     SmsMessage[] m = new SmsMessage[pdus.length];
     for(int i=0; i < pdus.length; ++i) {
      m[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
      str+="接收來電>\n";
      str+=m[i].getDisplayOriginatingAddress();
      str+="\n---簡訊內容---\n";
      str+=m[i].getMessageBody();
     }
     Toast.makeText(context, str, Toast.LENGTH_LONG).show();
     
     Intent intent2 = new Intent(context, GDD03.class);
     intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
     context.startActivity(intent2);
   
   
   
   
   
   
  } 
}

[TQC+ Android]簡單記事_210

Android 2.1 API 7 版本原始題目載點:http://db.tt/ypxzY27m

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/TQC210.pdf

GDD02.java - Activity主體(玩具版本)
package COM.TQC.GDD02;
import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class GDD02 extends Activity {
 private static final String DBNAME = "MY_DB";
 private static final String TABLENAME = "MY_TABLE";
 private static final String FIELD01_NAME = "_id";
 private static final String FIELD02_NAME = "_text1";
 private SQLiteDatabase dataBase;
 private android.database.Cursor cursor;
 private int _id = -1;
 private EditText EditText01;
 private Button Button01;
 private Button Button02;
 private Button Button03;
 private ListView ListView01;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        EditText01 = (EditText) findViewById(R.id.EditText01);
        Button01 = (Button) findViewById(R.id.BtnAdd);
        Button02 = (Button) findViewById(R.id.BtnUpdate);
        Button03 = (Button) findViewById(R.id.BtnDelete);     
        ListView01 = (ListView) findViewById(R.id.ListView01); 
        
        Button02.setEnabled(false);
        Button03.setEnabled(false);
        
        String CREATE_SQL = "create table if not exists "+TABLENAME+" ("+FIELD01_NAME+" integer primary key autoincrement, "+FIELD02_NAME+" varchar not null);";
        // answer part 1
        dataBase = openOrCreateDatabase(DBNAME, MODE_WORLD_WRITEABLE, null);
        dataBase.execSQL(CREATE_SQL);
        cursor = dataBase.query(TABLENAME, null, null, null, null, null, null);
     
        android.widget.SimpleCursorAdapter adapter = new android.widget.SimpleCursorAdapter(this, R.layout.list,
          cursor, new String[]
                { FIELD02_NAME }, new int[]
                { R.id.CheckedTextView01 });
        // answer part 2
        ListView01.setAdapter(adapter);
        
        Button01.setOnClickListener(new View.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    // answer part 3
    if(EditText01.getText().toString().trim().length()>0){
     insert(""+EditText01.getText());
    }
   }});
        Button02.setOnClickListener(new View.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    // answer part 4
    if(_id!=-1 && EditText01.getText().toString().trim().length()>0){
     update(_id,""+EditText01.getText());
     Button02.setEnabled(false);
     Button03.setEnabled(false);
    }
    EditText01.setText("");  // answer part 5    
   }});
        Button03.setOnClickListener(new View.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    if(_id!=-1){
     delete(_id);
     Button02.setEnabled(false);
     Button03.setEnabled(false);
     EditText01.setText(""); // answer part 6
    }
    
   }});
        
        ListView01.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener(){

   @Override
   public void onItemClick(android.widget.AdapterView<?> arg0,
     View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub
    // answer part 7
    cursor.moveToPosition(arg2);
    _id = cursor.getInt(0);
    EditText01.setText(cursor.getString(1));
    
    Button02.setEnabled(true);
          Button03.setEnabled(true);
   }});
        
        
        
    }
    private void insert(String text){
     // answer part 8
     ContentValues cv = new ContentValues();
     cv.put(FIELD02_NAME, text);
     dataBase.insert(TABLENAME, null, cv);
     cursor.requery();  
    }
    private void update(int id,String text){
     // answer part 9
     String whereClause = FIELD01_NAME+"=?";
     String whereArgs[] = { Integer.toString(id) };
     ContentValues cv = new ContentValues();
     cv.put(FIELD02_NAME, text);
     dataBase.update(TABLENAME, cv, whereClause, whereArgs);
     cursor.requery();  
    }
    private void delete(int id){
     // answer part 10
     String whereClause = FIELD01_NAME+"=?";
     String whereArgs[] = { Integer.toString(id) };
     dataBase.delete(TABLENAME, whereClause, whereArgs);
     cursor.requery();  
    }
}

GDD02.java - Activity主體(立人版本)
package COM.TQC.GDD02;
import android.app.Activity;
import android.content.ContentValues;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

public class GDD02 extends Activity {
 private static final String DBNAME = "MY_DB";
 private static final String TABLENAME = "MY_TABLE";
 private static final String FIELD01_NAME = "_id";
 private static final String FIELD02_NAME = "_text1";
 private SQLiteDatabase dataBase;
 private android.database.Cursor cursor;
 private int _id = -1;
 private EditText EditText01;
 private Button Button01;
 private Button Button02;
 private Button Button03;
 private ListView ListView01;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        EditText01 = (EditText) findViewById(R.id.EditText01);
        Button01 = (Button) findViewById(R.id.BtnAdd);
        Button02 = (Button) findViewById(R.id.BtnUpdate);
        Button03 = (Button) findViewById(R.id.BtnDelete);     
        ListView01 = (ListView) findViewById(R.id.ListView01); 
        
        Button02.setEnabled(false);
        Button03.setEnabled(false);
        
        String CREATE_SQL = "create table if not exists "+TABLENAME+" ("+FIELD01_NAME+" integer primary key autoincrement, "+FIELD02_NAME+" varchar not null);";
       
     // part 1
        dataBase = openOrCreateDatabase(DBNAME, MODE_WORLD_WRITEABLE, null);
        dataBase.execSQL(CREATE_SQL);
        cursor = dataBase.query(TABLENAME, null, null, null, null, null, null);
        //
        
        android.widget.SimpleCursorAdapter adapter = new android.widget.SimpleCursorAdapter(this, R.layout.list,
          cursor, new String[]
                { FIELD02_NAME }, new int[]
                { R.id.CheckedTextView01 });
       
        // part 2
        ListView01.setAdapter(adapter);
        //
        
        Button01.setOnClickListener(new View.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    // part  add toString()
    if(!EditText01.getText().toString().equals("")){
     insert(""+EditText01.getText());
    }
   }});
        Button02.setOnClickListener(new View.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    //part  add toString()
    if(_id!=-1 && !EditText01.getText().toString().equals("")){
     update(_id,""+EditText01.getText());
     Button02.setEnabled(false);
     Button03.setEnabled(false);
    }
    
   }});
        Button03.setOnClickListener(new View.OnClickListener(){

   @Override
   public void onClick(View arg0) {
    // TODO Auto-generated method stub
    if(_id!=-1){
     delete(_id);
     Button02.setEnabled(false);
     Button03.setEnabled(false);
    }
    
   }});
        
        ListView01.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener(){

   @Override
   public void onItemClick(android.widget.AdapterView<?> arg0,
     View arg1, int arg2, long arg3) {
    // TODO Auto-generated method stub
    
    //part 3
    cursor.moveToPosition(arg2);
    EditText01.setText(cursor.getString(1));
    _id = cursor.getInt(0);
    //
    
    Button02.setEnabled(true);
          Button03.setEnabled(true);
   }});
        
        
        
    }
    private void insert(String text){
     
     //part 4 
        ContentValues cv = new ContentValues();
        cv.put(FIELD02_NAME, text);
     dataBase.insert(TABLENAME, null, cv);
     cursor.requery();
        //
        
    }
    private void update(int id,String text){
     
     // part 5 
     ContentValues cv = new ContentValues();
        cv.put(FIELD02_NAME, text);
        String wA[] = {Integer.toString(id)};
      dataBase.update(TABLENAME, cv, FIELD01_NAME + "=?", wA);
      cursor.requery();
        
        //
        
        
        
    }
    private void delete(int id){
     
        // part 6
     
        String wA[] = {Integer.toString(id)};
      dataBase.delete(TABLENAME, FIELD01_NAME + "=?", wA);
      cursor.requery();
     
     //
        
        
    }
}

[TQC+ Android]我是誰?_208

Android 2.1 API 7 版本原始題目載點:http://db.tt/siAtVfAT

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/TQC208.pdf

GDD02.java - Activity主體
package COM.TQC.GDD02;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class GDD02 extends Activity {
 public static final String PREF_NAME = "GDD02_PREF";
 public static final String key01 = "key01";
 public static final String key02 = "key02";
 public static final String key03 = "key03";
 
 private EditText EditText01;
 private EditText EditText02;
 private EditText EditText03;
 
 private Button btn;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        EditText01 = (EditText)findViewById(R.id.editText01);
        EditText02 = (EditText)findViewById(R.id.editText02);
        EditText03 = (EditText)findViewById(R.id.editText03);
        
        SharedPreferences sp = getSharedPreferences(PREF_NAME, 0);
        EditText01.setText(sp.getString(key01, ""));
        EditText02.setText(sp.getString(key02, ""));
        EditText03.setText(sp.getString(key03, ""));
        
        btn = (Button)findViewById(R.id.button1);
        btn.setOnClickListener(new Button.OnClickListener() {
   
   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    finish();
   }
  });
    }
    @Override
 protected void onStop() {
     super.onStop();
  SharedPreferences sp = getSharedPreferences(PREF_NAME, 2);
  SharedPreferences.Editor editor = sp.edit();
  editor.putString(key01, ""+EditText01.getText().toString());
  editor.putString(key02, ""+EditText02.getText().toString());
  editor.putString(key03, ""+EditText03.getText().toString());
  editor.commit(); 

 } 
}


[TQC+ Android]計算BMI值_104

Android 2.1 API 7 版本原始題目載點:http://db.tt/nVrompty

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/TQC104.pdf

首先進入AndroidMinifest.xml目錄add兩個Activity GDD01和GDD01_child (user permission)

定義兩個僅可單選的 RadioButton (必須選擇 Radio Group 右鍵Orientation > Horizontal 砍掉多的RadioButton )
兩個 EditText、一個 Button 、其餘TextView
如畫面所示



xml
<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:android1="http://schemas.android.com/apk/res/android"
    android:id="@+id/widget0"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="2dp"
        android:layout_y="51dp"
        android:text="@string/text3" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="-2dp"
        android:layout_y="96dp"
        android:text="@string/text1" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_x="3dp"
        android:layout_y="150dp"
        android:text="@string/text2" />

    <RadioGroup
        android1:id="@+id/radioGroup1"
        android1:layout_width="wrap_content"
        android1:layout_height="wrap_content"
        android1:layout_x="84dp"
        android1:layout_y="38dp"
        android1:orientation="horizontal" >

        <RadioButton
            android1:id="@+id/rb1"
            android1:layout_width="wrap_content"
            android1:layout_height="wrap_content"
            android1:checked="true"
            android1:text="男性" />

        <RadioButton
            android1:id="@+id/rb2"
            android1:layout_width="wrap_content"
            android1:layout_height="wrap_content"
            android1:text="女性" />
    </RadioGroup>

    <EditText
        android1:id="@+id/height"
        android1:layout_width="wrap_content"
        android1:layout_height="wrap_content"
        android1:layout_x="83dp"
        android1:layout_y="90dp"
        android1:ems="10"
        android1:inputType="numberDecimal" >

        <requestFocus />
    </EditText>

    <EditText
        android1:id="@+id/weight"
        android1:layout_width="wrap_content"
        android1:layout_height="wrap_content"
        android1:layout_x="80dp"
        android1:layout_y="144dp"
        android1:ems="10"
        android1:inputType="numberDecimal" />

    <Button
        android1:id="@+id/btn"
        android1:layout_width="wrap_content"
        android1:layout_height="wrap_content"
        android1:layout_x="125dp"
        android1:layout_y="200dp"
        android1:text="計算" />

    <TextView
        android1:id="@+id/textView1"
        android1:layout_width="wrap_content"
        android1:layout_height="wrap_content"
        android1:layout_x="8dp"
        android1:layout_y="3dp"
        android1:text="@string/title" />

</AbsoluteLayout>
GDD01.java - Activity主體
package COM.TQC.GDD01;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;

public class GDD01 extends Activity 
{
  private EditText etheight;
  private EditText etweight;
  private RadioButton rb1;
  private RadioButton rb2;
    
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    
    setContentView(R.layout.main);
    
    Button b1 = (Button) findViewById(R.id.button1);
    b1.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View v)
      {
       
      
        //從輸入介面中取出了的身高、體重值,要將身高、體重值傳送給 child_Activity 後作計算
       etheight=(EditText)findViewById(R.id.height);
       etweight=(EditText)findViewById(R.id.weight);
       rb1=(RadioButton)findViewById(R.id.rb1);
       rb2=(RadioButton)findViewById(R.id.rb2);
       String sex;
       if(rb1.isChecked()) sex="M";
       else sex="W";       
       
        //這些附加在 Intent 上的訊息都儲存在 Bundle 物件中
        Intent intent = new Intent(GDD01.this, GDD01_child.class);
        Bundle bundle = new Bundle();
        bundle.putString("Sex", sex);
        bundle.putDouble("height", 
          Double.parseDouble(etheight.getText().toString()));
        bundle.putDouble("weight", 
          Double.parseDouble(etweight.getText().toString()));
     
     //透過「intent.putExtras(bundle)」敘述,將「bundle」 物件附加在 Intent 上,隨著 Intent 送出而送出
        intent.putExtras(bundle);
        startActivityForResult(intent, 0);
           
       
      }
    });
  }
  
  
  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data)
  {
    switch (resultCode)
    { 
      case RESULT_OK:
    
        Bundle bundle = data.getExtras();
        String Sex = bundle.getString("Sex");
        double height = bundle.getDouble("height");
        double weight = bundle.getDouble("weight");
        
        etheight.setText("" + height);
        etweight.setText("" + weight);
        if(Sex.equals("M"))
        {
          rb1.setChecked(true);
        }else
        {
          rb2.setChecked(true);
        }
        break;       
      default: 
        break; 
     } 
   } 
}

GDD01_child.java - Activity主體
package COM.TQC.GDD01 ;

import java.text.DecimalFormat;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class GDD01_child extends Activity 
{
  Bundle bundle;
  Intent intent;
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) 
  {
    super.onCreate(savedInstanceState);
    
    
    setContentView(R.layout.mylayout);
    
    
    intent=this.getIntent();
    bundle = intent.getExtras();
    
   
    String Sex = bundle.getString("Sex");
    double height = bundle.getDouble("height");
    double weight = bundle.getDouble("weight");
      
    
    String BMI_result = this.getBMI(height,weight);
    String BMI_advice = this.getAdvice(Sex,height,weight);
    
    TextView tvBMI=(TextView) findViewById(R.id.tvBMI);
    tvBMI.setText(BMI_result);
    TextView tvAdvice=(TextView) findViewById(R.id.tvAdvice);
    tvAdvice.setText(BMI_advice);
    
  
    Button b1 = (Button) findViewById(R.id.btn);
    b1.setOnClickListener(new Button.OnClickListener()
    {
      public void onClick(View v)
      {          
      
       GDD01_child.this.setResult(RESULT_OK, intent);
       
      
       GDD01_child.this.finish();
      }
    });
  }
  
 //BMI值格式化
  private String format(double num)
  {
      
   return String.format("%.2f", num);
   
  }
  //取得BMI值
  private String getBMI (double height, double weight)
  {
   
    return this.getString(R.string.report_result)+
        " "+format(weight/(height*height));
  }
  //依BMI值取得建議
  private String getAdvice (String Sex, double height, double weight)
  {
  
     double bmi = weight / (height * height);
     
     double max_bmi, min_bmi;
     if(Sex=="M"){
      max_bmi=25;
      min_bmi=22;
     }else{
      max_bmi=22;
      min_bmi=18;
     }
     if(bmi>max_bmi)
      return this.getString(R.string.advice_heavy);
     else if(bmi<min_bmi)
      return this.getString(R.string.advice_light);
     else
      return this.getString(R.string.advice_average);

  }

}

[TQC+ Android]電費計算機_102

Android 2.1 API 7 版本原始題目載點:http://db.tt/ruQKU9OO

僑光科技大學 蔡存孝老師 解說參考:http://rs2.ocu.edu.tw/~tsay/files/TQC102.pdf

本題預設 values/strings.xml (中文)及 values-en/strings.xml (英文)檔案在 Resouces 裡面
方便多國語言切換,系統會自動偵測語言,不需要做任何更動
main.xml右上可以切換語系,不需要等到執行AVD

1.首先在 res/layout/main.xml 裡拉好
TextView (右鍵Edit Text 選擇String,如要清空,右鍵Edit Text 選擇Clear)
EditText
Spinner(如太長,右鍵 Layout Height > other... 打50dp, 右鍵 Edit Entries 選 Array > option_vs)
Button
如畫面所示


main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="left" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="@string/title" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:text="@string/text1" />

    <Spinner
        android:id="@+id/input_v"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_below="@+id/textView1"
        android:layout_toRightOf="@+id/textView2"
        android:entries="@array/option_vs" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/input_v"
        android:text="@string/text2" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/input_a"
        android:text="@string/text3" />

    <EditText
        android:id="@+id/input_hr"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/input_a"
        android:layout_toRightOf="@+id/textView4"
        android:ems="10"
        android:inputType="number" />

    <EditText
        android:id="@+id/input_a"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/input_hr"
        android:layout_alignTop="@+id/textView3"
        android:ems="10"
        android:inputType="numberDecimal" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/input_hr"
        android:text="@string/text4" />

    <EditText
        android:id="@+id/input_m"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/input_hr"
        android:layout_alignTop="@+id/textView5"
        android:ems="10"
        android:inputType="number" />

    <Button
        android:id="@+id/submit"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/input_m"
        android:text="@string/btn" />

    <TextView
        android:id="@+id/textView7"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/submit"
        android:text="@string/text5" />

    <TextView
        android:id="@+id/respond"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView7" />

</RelativeLayout>


GDD01.java - Activity主體
package COM.TQC.GDD01;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;

public class GDD01 extends Activity {
 
 protected TextView MyOutcome;
 protected int volt;
    Spinner input_v;
    EditText input_a, input_hr, input_m;
    Button submit;
    TextView respond;
    
 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
     input_a = (EditText) findViewById(R.id.input_a);   
     input_hr = (EditText) findViewById(R.id.input_hr);
     input_m = (EditText) findViewById(R.id.input_m);
     submit = (Button) findViewById(R.id.submit);
     input_v = (Spinner) findViewById(R.id.input_v);
     respond = (TextView) findViewById(R.id.respond);

        input_v.setOnItemSelectedListener(new Spinner.OnItemSelectedListener(){

   @Override
   public void onItemSelected(AdapterView<?> arg0, View arg1,
     int arg2, long arg3) {
    // TODO Auto-generated method stub
    if(arg2 == 0) volt = 110;
    else volt = 220;
   }

   @Override
   public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub
    
   }});
        
        submit.setOnClickListener(new Button.OnClickListener(){

   @Override
   public void onClick(View v) {
    // TODO Auto-generated method stub
    double a = Double.parseDouble(input_a.getText().toString());
    double hr = Double.parseDouble(input_hr.getText().toString());
    double m = Double.parseDouble(input_m.getText().toString());
    double w = (double)a*volt;
    int ans = (int) Math.round(w/1000 * hr * 30 * m);
    respond.setText("$ "+ans);

   }});
        
        
 
    }

}