手機衛士專案(第二天)

我叫阿狸貓發表於2014-04-04

1.自定義對話方塊

在layout資料夾下建立自定義對話方塊的樣式

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@android:color/white">
	<TextView
	    android:textColor="@android:color/white" 
	    android:background="@android:color/black"
	    android:gravity="center"
	    android:layout_width="match_parent"
    	android:layout_height="30dp"
    	android:text="設定密碼"/>
	<EditText 
	    android:hint="請輸入密碼"
	    android:layout_width="match_parent"
    	android:layout_height="wrap_content"/>
	<EditText 
	    android:inputType="textPassword"
	    android:hint="請再次輸入密碼"
	    android:layout_width="match_parent"
    	android:layout_height="wrap_content"/>
	
	<LinearLayout 
	    android:gravity="center"
        android:layout_width="match_parent"
    	android:layout_height="wrap_content"
    	android:orientation="horizontal">
        <Button 
            android:text="確定"
            android:layout_width="wrap_content"
    	android:layout_height="wrap_content"/>
        <Button 
            android:text="取消"
            android:layout_width="wrap_content"
    	android:layout_height="wrap_content"/>
    </LinearLayout>
</LinearLayout>

在java程式碼裡寫  如果不像下面這麼些,2.3會出現黑色邊框

AlertDialog.Builder builder = new Builder(this);
AlertDialog dialog = builder.create();//自己建立一個對話方塊
dialog.setView(view, 0, 0, 0, 0);//第一個引數:載入哪個佈局  後面幾個引數是距離上下左右的邊距
dialog.show();


2.MD5加密

public class Md5Utils {
	/**
	 * md5加密工具方法
	 * 
	 * @param text
	 * @return
	 */
	public static String encode(String text) {
		try {
			MessageDigest digester = MessageDigest.getInstance("MD5");
			byte[] result = digester.digest(text.getBytes());
			StringBuffer sb = new StringBuffer();
			for (byte b : result) {
				int number = b & 0xff;// 加鹽
				String hexStr = Integer.toHexString(number);
				if (hexStr.length() == 1) {
					sb.append("0");
				}
				sb.append(hexStr);
			}
			return sb.toString();
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
			// can't reach 不可能發生
			return "";
		}
	}
}



3.選單設定和點選選單後的事件

(1)先設定Menu裡要顯示的item,在res目錄下的menu資料夾裡建立檔案

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item 
	    android:id="@+id/item_about"
	    android:title="關於...">
	</item>
</menu>
(2)覆寫onCreateOptionsMenu和onOptionsItemSelected方法

public boolean onCreateOptionsMenu(Menu menu) {//建立Menu時執行改方法
	//將xml檔案轉換成menu佈局
	MenuInflater inflater = new MenuInflater(this);
	inflater.inflate(R.menu.lost_find_menu, menu);//第一個引數:將要被轉換的xml檔案(在menu資料夾下)   第二個引數:轉換成選單物件後賦值給這個menu
	return super.onCreateOptionsMenu(menu);//返回true才會建立menu
}

public boolean onOptionsItemSelected(MenuItem item) {//當點選Menu上的item的時候執行該方法
	switch (item.getItemId()) {
	case R.id.item_about:
		Toast.makeText(getApplicationContext(), "關於...", Toast.LENGTH_SHORT).show();
		break;
	}
	return super.onOptionsItemSelected(item);
}


4.在非Activity上下文裡開啟Activity,一定要設定flag

Intent intent = new Intent();
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

5.獲取SIM卡資訊,注意配置檢視手機狀態許可權     android.permission.READ_PHONE_STATE

TelephonyManager manager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);//電話管理器
String simNum = manager.getSimSerialNumber();

6.Activity之間切換的動畫效果

(1)在res目錄下建立anim資料夾建立檔案   (要配置4個檔案,顯示下一頁的進入和移出  顯示上一頁時的進入和移出  )

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="300"
    android:fromXDelta="0"
    android:fromYDelta="0"
    android:toXDelta="100%p"
    android:toYDelta="0" >
    <!-- 
    	duration:持續時間
    	fromXDelta:x起點位置
    	toXDelta:x終點位置
    	fromYDelta:y起點位置
    	toYDelta:y終點位置
     -->
</translate>


手勢識別器:三大步

1.宣告一個手勢識別器

private GestureDetector mGestureDetector;
2.初始化手勢識別器(在onCreate中執行)

mGestureDetector = new GestureDetector(this,new GestureDetector.SimpleOnGestureListener(){
		//手指在螢幕上滑動時執行該方法
		public boolean onFling(MotionEvent e1, MotionEvent e2,
				float velocityX, float velocityY) {
			if(!(Math.abs(velocityX)<100)){//X軸速度大於100
				if(e2.getRawX()-e1.getRawX()>200){//顯示上一個介面
					pre(null);
					return true;
				}else if(e1.getRawX()-e2.getRawX()>200){//顯示下一個介面
					next(null);
					return true;
				}
			}
			return super.onFling(e1, e2, velocityX, velocityY);
		}
	});
3.覆寫onTouchEvent方法(手指觸控螢幕的時候執行)

public boolean onTouchEvent(MotionEvent event) {//當手指觸控螢幕的時候就會呼叫該方法,   MotionEvent是當前的觸控事件
	mGestureDetector.onTouchEvent(event);//將當前的觸控事件,傳給手勢識別器的onFling回撥函式去執行
	return super.onTouchEvent(event);
}
4.在開啟Activity後執行overridePendingTransition   此方法必須在startActivity或finish後執行

@Override
public void next(View view) {
	Intent intent = new Intent(this,Setup2Activity.class);
	startActivity(intent);
	finish();
	//此方法必須在startActivity 或者finish方法後邊
	overridePendingTransition(R.anim.tran_next_in, R.anim.tran_next_out);
}

7.android.provider.Telephony.SMS_RECEIVED  接收簡訊廣播在4.2和4.3版本的時候ecpilse上是沒有提示的,但是可以手動寫,照樣識別。


8.播放音樂

//此方法已經自動呼叫了prepare()不能再手動呼叫
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.c);
mediaPlayer.setVolume(1.0f, 1.0f);//設定左聲道和右聲道的聲音為最大
//mediaPlayer.setLooping(true);  設定永久迴圈
mediaPlayer.start();


相關文章