Android有用程式碼片斷(六)
不知不覺中,就收集了超過95條的自己感覺有意思的程式碼片段,分為五篇文章:android有用程式碼片段、Android有用程式碼片段(二)、Android有用程式碼片段(三)、Android有用程式碼片段(四)、
Android有用程式碼片段(五)。這五篇,今天,開始第六篇的整理!這裡解釋一下,因為一、二、三都是每個有20個片段,但是在四中,由於第70個程式碼過長,所以在第四篇中,只有10個片段。 第五篇裡面有25個。
九十六、java.util.MissingFormatArgumentException 錯誤
在有站位符的列印語句中,經常會犯下一個錯誤。
如:System.out.printf( "y=%3d "+y),就會報這個錯誤。
應修改為:;改為System.out.printf( "y=%3d ",y)
九十七、Android判斷是Pad或者手機
public boolean isTabletDevice() {
TelephonyManager telephony = (TelephonyManager) getContext().getSystemService(Context.TELEPHONY_SERVICE);
int type = telephony.getPhoneType();
if (type == TelephonyManager.PHONE_TYPE_NONE) {
return true;
} else {
return false;
}
}
九十八、判斷android網路狀態
State mWifiState = null;
State mMobileState = null;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
mWifiState = cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();
mMobileState = cm.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
.getState();
if (mWifiState != null && mMobileState != null && State.CONNECTED != mWifiState
&& State.CONNECTED == mMobileState) {
// 手機網路連線成功
} else if (mWifiState != null && mMobileState != null && State.CONNECTED != mWifiState && State.CONNECTED != mMobileState) {
mHandler.sendEmptyMessage(MSG_SHOW_NET_DIALOG);
} else if (mWifiState != null && State.CONNECTED == mWifiState) {
// 無線網路連線成功
}
九十九、ImageView的ScaleType屬性
ImageView.ScaleType|android:scaleType值的意義:
ImageView.ScaleType.CENTER|android:scaleType="center" 按圖片的原來size居中顯示,當圖片長/寬超過View的長/寬,則擷取圖片的居中部分顯示
ImageView.ScaleType.CENTER_CROP|android:scaleType="centerCrop" 按比例擴大圖片的size居中顯示,使得圖片長 (寬)等於或大於View的長(寬)
ImageView.ScaleType.CENTER_INSIDE|android:scaleType="centerInside" 將圖片的內容完整居中顯示,通過按比例縮小或原來的size使得圖片長(寬)等於或小於View的長(寬)
ImageView.ScaleType.FIT_CENTER|android:scaleType="fitCenter" 把圖片按比例擴大(縮小)到View的寬度,居中顯示
ImageView.ScaleType.FIT_END|android:scaleType="fitEnd" 把圖片按比例擴大(縮小)到View的寬度,顯示在View的下部分位置
ImageView.ScaleType.FIT_START|android:scaleType="fitStart" 把圖片按比例擴大(縮小)到View的寬度,顯示在View的上部分位置
ImageView.ScaleType.FIT_XY|android:scaleType="fitXY" 把圖片按照指定的大小在View中顯示
ImageView.ScaleType.MATRIX|android:scaleType="matrix" 用matrix來繪製
一百、垂直進度條
- @Override
- protected synchronized void onDraw(Canvas canvas)
- {
- // TODO Auto-generated method stub
- canvas.rotate(-90);//反轉90度,將水平ProgressBar豎起來
- canvas.translate(-getHeight(), 0);//將經過旋轉後得到的VerticalProgressBar移到正確的位置,注意經旋轉<span style="white-space:pre"> </span> 後寬高值互換
- super.onDraw(canvas);
- }
一零一、android獲取本機Ip地址
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en = NetworkInterface
.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf
.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
Log.e("WifiPreference IpAddress", ex.toString());
}
return null;
}
別忘了加許可權:
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
- <uses-permission android:name="android.permission.INTERNET"></uses-permission>
有時候,有的手機會有ip6地址,所以在if()判斷裡面,最好這樣寫:
if (!inetAddress.isLoopbackAddress()&& InetAddressUtils
.isIPv4Address(inetAddress
.getHostAddress().toString())) {
一零二、開機啟動
原理就是啟動一個BroadcastReceiver來監聽系統發出的開機廣播:Android.intent.action.BOOT_COMPLETED
public class StartupReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
//xxx 你要跳轉到的activity
Intent i = new Intent(context,xxx.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//將intent以startActivity傳送給作業系統
context.startActivity(i);
}
}
後面 在manifest裡面註冊BroadcastReceiver
<receiver android:name=".StartupReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
最後,再新增上許可權就可以了
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"></uses-permission>
一零三、Java物件賦值注意點
剛剛再看Think in Java 4的時候,提醒下自己!
對主資料型別的賦值是非常直接的。由於主型別容納了實際的值,而且並非指向一個物件的控制程式碼,所以在為其賦值的時候,可將來自一個地方的內容複製到另一個地方。例如,假設為主型別使用“A=B”,那麼B處的內容就複製到A。若接著又修改了 A,那麼 B 根本不會受這種修改的影響。作為一名程式設計師,這應成為自己的常識。
但在為物件“賦值”的時候,情況卻發生了變化。對一個物件進行操作時,我們真正操作的是它的控制程式碼。所以倘若“從一個物件到另一個物件”賦值,實際就是將控制程式碼從一個地方複製到另一個地方。這意味著假若為物件使用“C=D”,那麼C 和D最終都會指向最初只有 D 才指向的那個物件。下面這個例子將向大家闡示這一點。
把書中的例子稍微修改了下:
package cn.demo;
class Number {
int i;
}
public class Assignment {
public static void main(String[] args) {
Number n1 = new Number();
Number n2 = new Number();
n1.i = 9;
n2.i = 47;
System.out.println("1: n1.i: " + n1.i +
", n2.i: " + n2.i);
n1.i = n2.i;
System.out.println("2: n1.i: " + n1.i +
", n2.i: " + n2.i);
n1.i = 32;
System.out.println("3: n1.i: " + n1.i +
", n2.i: " + n2.i);
n1 = n2;
System.out.println("4: n1.i: " + n1.i +
", n2.i: " + n2.i);
n1.i = 27;
System.out.println("5: n1.i: " + n1.i +
", n2.i: " + n2.i);
}
}
列印結果:
1: n1.i: 9, n2.i: 47
2: n1.i: 47, n2.i: 47
3: n1.i: 32, n2.i: 47
4: n1.i: 47, n2.i: 47
5: n1.i: 27, n2.i: 27
一零四、Notification點選取消
notification.flags |= Notification.FLAG_AUTO_CANCEL;一零五、保留表結構,刪除表中所有內容
"DELETE FROM " + TABLE_NAME + " WHERE 1 = 1"
一零六、Android手機獲取手機唯一識別號
在開發手機應用時,開發者最關心的是開發的手機軟體有多少使用者安裝,並且正在使用。這就需要識別手機的唯一性。目前我瞭解的有兩種方法,獲取手機的imei號(imei號是唯一識別手機的號碼)。獲取android id號(android id 是手機系統的唯一號碼)。
第一種方法:
android獲取手機imei號的方法在在android系統中獲取imei號和其他手機資訊一文中做了詳細的介紹。其中android在 2.0以上的版本中,獲取手機imei號已經不需要相應的讀取手機資訊的許可權了。
< uses-permission android:name="android.permission.READ_PHONE_STATE" />
但是目前1.6以下的版本使用者佔使用者的近50%,如果想要讓1.6以下版本的使用者也可以獲取imei號,那就要新增許可權。
好處是唯一標識手機,缺點是可能需要相應的使用者許可權。
String myIMSI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI);
String myIMEI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI);
第二種方法:
可以獲取android id號,如果一個手機裝置第一次啟動隨即產生的一個數字,如果系統改變,該號可能會改變。
android id號解釋:http://androidappdocs-staging.appspot.com/reference/android /provider/Settings.Secure.html#ANDROID_ID
獲取方法:
String t=android.provider.Settings.System.getString(getContentResolver(), "android_id");
Log.i("huilurry","android_id="+t);
Ms測試結果:
07-13 13:12:49.835: INFO/huilurry(17455): android_id=20014289e714f20c
好處是所有版本都試用,缺點是可能會和其他機子重複或本機改變。via:http://wangjun.easymorse.com /?p=665
3、獲取IMEI是把,telephonypackage的TelephonyManager類的getDeviceId() 方法
獲得IMSI / IMEI(SIM和手機的唯一識別ID)
學習內容: 你將學到如何讀出你手機裡的SIM卡的IMSI (國際移動使用者ID) 和IMEI (國際移動裝置ID). IMSI 與 SIM唯一對應, IMEI 與 裝置唯一對應.
可能應用的場合: 你可能需要 唯一的id 去授權/註冊,或者用於你的Android-Activity的license目的 下面的兩行程式碼將會使你獲得SIM卡唯一 ID IMSI 和裝置唯一ID IMEI
描述:
IMSI是一個 唯一的數字, 標識了GSM和UMTS 網路裡的唯一一個使用者. 它 儲存 在手機的SIM卡里,它會通過手機傳送到網路上.
IMEI也是一串唯一的數字, 標識了 GSM 和 UMTS網路裡的唯一一個手機. 它通常被列印在手機裡電池下面的那一面,撥 *#06# 也能看到它.
程式碼: 這裡是你在Android裡讀出 唯一的 IMSI-ID / IMEI-ID 的方法。
Java:
String myIMSI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMSI);
String myIMEI = android.os.SystemProperties.get(android.telephony.TelephonyProperties.PROPERTY_IMEI);
一零七、 靜默解除安裝系統軟體和第三方軟體
一個個解除安裝軟體,彈出解除安裝軟體提示好麻煩,現在特作出下列方法,可以靜默解除安裝
靜默安裝敬請期待。。。。
//下面3句是靜默解除安裝系統軟體命令
String busybox="mount -o remount rw /system";
String chmod="chmod 777 /system/app/HtcTwitter.apk";
uninstallapk="rm -r /system/app/HtcTwitter.apk";
//下面3句是靜默解除安裝第三方軟體命令
String busybox1="mount -o remount rw /data";
String chmod1="chmod 777 /data/app/com.yingyonghui.market-2.apk";
uninstallapk1="pm uninstall com.yingyonghui.market";
chmodApk(busybox1,chmod1);
/*
* 對要解除安裝的apk賦予許可權
*/
public void chmodApk(String busybox ,String chmod)
{
try {
Process process = null;
DataOutputStream os = null;
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(busybox);
os.flush();
os.writeBytes(chmod);
os.flush();
os.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
/*
* 解除安裝apk
*/
public void uninstallApk(String uninstallapk)
{
try {
Process process = null;
DataOutputStream os = null;
process = Runtime.getRuntime().exec("su");
os = new DataOutputStream(process.getOutputStream());
os.writeBytes(uninstallapk);
os.flush();
os.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
一零八、獲取當前顯示的activity
用ActivityManager裡面可以獲取到當前執行的所有任務,所有程式和所有服務,這是工作管理員的核心。
仔細看getRunningTasks的文件,裡面說獲取的是系統中"running"的所有task,"running"狀態包括已經被系統凍結的task。而且返回的這個列表是按照順序排列的,也就是說第一個肯定比第二個後執行。
getRunningTasks有個整型引數,表示返回列表的最大個數。那麼,我們如果把1作為引數給進去,那麼他返回的task就是當前執行的那個task,然後從task中獲取到最頂層的activity,這個activity就是當前顯示給使用者的那個activity了。
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
ComponentName cn = am.getRunningTasks(1).get(0).topActivity;
Log.d("", "pkg:"+cn.getPackageName());
Log.d("", "cls:"+cn.getClassName());
一零九、android程式碼實現ViewPager的indictor效果
一一零、Android 手繪 - 支援儲存為圖片
一一一、android 遮罩層效果
一一二、 Android中從SD卡中/拍照選擇圖片並進行剪裁的方法
/**
* 實現文字複製功能
* @param content 要複製的內容
*/
public static void copy(String content, Context context) {
// 得到剪貼簿管理器
ClipboardManager cmb = (ClipboardManager) context
.getSystemService(Context.CLIPBOARD_SERVICE);
cmb.setText(content.trim());
}
try {
ImageView img=(ImageView) findViewById(R.id.test_img_file);
//獲取從本地獲取的檔案路徑,用FileInputstream讀入檔案,並將圖片檔案轉換成點陣圖
Bundle bundle=getIntent().getExtras();
String path=bundle.getString("test");
FileInputStream fa=new FileInputStream(path);
Bitmap bm=BitmapFactory.decodeStream(fa);//原圖
Bitmap wm=BitmapFactory.decodeResource(getResources(), R.drawable.wate_market);//水印
//將creatBitmap()方法的返回值(返回點陣圖)放到圖片控制元件顯示
img.setImageBitmap(createBitMap(bm,wm));
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
private Bitmap createBitMap(Bitmap src,Bitmap wmsrc){
/**
* 水印製作方法
*/
String tag="xx";
Log.d(tag, "開始了,畫圖");
if(src==null){
return null;
}
int w=src.getWidth();
int h=src.getHeight();
int wmw=wmsrc.getWidth();
int wmh=wmsrc.getHeight();
//create the new bitmap
Bitmap newb=Bitmap.createBitmap(w,h,Config.ARGB_8888);//建立一個底圖
Canvas cv=new Canvas(newb);
//將底圖畫進去
cv.drawBitmap(src, 0, 0,null);//在0,0座標開始畫入src
//講水印畫進去
cv.drawBitmap(wmsrc, w-wmw+5, h-wmh+5, null);
//儲存圖片
cv.save(Canvas.ALL_SAVE_FLAG);
cv.restore();
return newb;
}
}
getDialog().getWindow().setBackgroundDrawable(new
ColorDrawable(Color.TRANSPARENT));
相關文章
- Android 開發有用程式碼積累Android
- C++Builder常用程式碼片斷 (轉)C++UI
- 夢斷程式碼閱讀筆記之六筆記
- J2ME常用功能程式碼片斷
- 60個有用CSS程式碼片段CSS
- Android程式碼判斷手機是否已rootAndroid
- Android通過程式碼修改圖片顏色Android
- 60個有用CSS程式碼片段(二)CSS
- 30+有用的CSS程式碼片段CSS
- 很有用的HTML+JavaScript程式碼HTMLJavaScript
- jquery判斷<img>圖片是否載入完成程式碼例項jQuery
- 【Android_忍者六道】近百android程式原始碼貢獻(收藏)Android原始碼
- 相容IE瀏覽器的判斷img圖片尺寸的程式碼瀏覽器
- 程式碼片1
- android程式碼中動態調整圖片的位置Android
- Android圖片壓縮實現過程及程式碼Android
- iOS開發比較有用的程式碼段iOS
- 超級有用的9個PHP程式碼片段PHP
- 微軟SQLServer密碼管理六個危險判斷微軟SQLServer密碼
- Concurrency(六: 同步程式碼塊)
- 判斷是android安卓還是ios蘋果系統的js程式碼Android安卓iOS蘋果JS
- android實戰專案六imageview做一個幻燈片效果AndroidView
- 網上的很多Android專案原始碼有用嗎?Android開發注意的地方。Android原始碼
- 有用 Android Studio 操作方法Android
- 六、Vue條件判斷Vue
- android典型程式碼系列(二十)------多執行緒下載、斷點續傳Android執行緒斷點
- android學習之路(六)---- 圖片載入庫的優化、封裝Android優化封裝
- 六西格瑪對什麼型別的專案有用?型別
- Android 生成帶圖片的二維碼Android
- Android推斷程式前後臺狀態Android
- Android 8.0 原始碼分析 (六) BroadcastReceiver 啟動Android原始碼AST
- android ImageUtils 圖片處理工具類 收集平時用到的程式碼段Android
- Android程式碼混淆Android
- Android常用程式碼Android
- 五顏六色的程式碼:論程式碼的正確位置
- js程式碼判斷瀏覽器JS瀏覽器
- Android圖片載入庫Picasso原始碼分析Android原始碼
- 10個超級有用、必須收藏的PHP程式碼樣例PHP