日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

android 常用方法集合

發(fā)布時(shí)間:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 常用方法集合 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

private?static?Contextcontext;

privatestatic?Displaydisplay;

private?static?String?TAG?=?"MyTools";


public?MyTools(Context context) {

MyTools.context?= context;

}


publicstaticint?getScreenHeight()// 獲取屏幕高度

{

if?(context?==null) {

Log.e("hck",TAG?+"? getScreenHeight: "?+"context 不能為空");

return?0;

}

display?= ((Activity)context).getWindowManager().getDefaultDisplay();

return?display.getHeight();

}


publicstaticint?getScreenWidth()// 獲取屏幕寬度

{

if?(context?==null) {

Log.e("hck",TAG?+"? getScreenHeight: "?+"context 不能為空");

return?0;

}

display?= ((Activity)context).getWindowManager().getDefaultDisplay();

return?display.getWidth();

}


public?static?String getSDK() {

return?android.os.Build.VERSION.SDK;// SDK號(hào)


}


publicstatic?String getModel()// 手機(jī)型號(hào)

{

return?android.os.Build.MODEL;

}


publicstatic?String getRelease()// android系統(tǒng)版本號(hào)

{

return?android.os.Build.VERSION.RELEASE;

}


publicstatic?String getImei(Context context)// 獲取手機(jī)身份證imei

{

TelephonyManager telephonyManager = (TelephonyManager) context

.getSystemService(Context.TELEPHONY_SERVICE);

return?telephonyManager.getDeviceId();

}


publicstatic?String getVerName(Context context) {// 獲取版本名字

try?{

String pkName = context.getPackageName();

String versionName = context.getPackageManager().getPackageInfo(

pkName, 0).versionName;


return?versionName;

}?catch?(Exception e) {

}

returnnull;

}


publicstaticint?getVerCode(Context context) {// 獲取版本號(hào)

String pkName = context.getPackageName();

try?{

int?versionCode = context.getPackageManager().getPackageInfo(

pkName, 0).versionCode;

return?versionCode;

}?catch?(NameNotFoundException e) {

e.printStackTrace();

}

return?0;

}


publicstaticboolean?isNetworkAvailable(Context context) {// 判斷網(wǎng)絡(luò)連接是否可用

// 獲取手機(jī)所有連接管理對(duì)象(包括對(duì)wi-fi,net等連接的管理)

ConnectivityManager connectivity = (ConnectivityManager) context

.getSystemService(Context.CONNECTIVITY_SERVICE);

if?(connectivity ==null)

returnfalse;

// 獲取網(wǎng)絡(luò)連接管理的對(duì)象

NetworkInfo info = connectivity.getActiveNetworkInfo();

if?(info ==null?|| !info.isConnected())

returnfalse;

// 判斷當(dāng)前網(wǎng)絡(luò)是否已經(jīng)連接

return?(info.getState() == NetworkInfo.State.CONNECTED);

}


publicstatic?String trim(String str,int?limit) {// 字符串超出給定文字則截取

String mStr = str.trim();

return?mStr.length() > limit ? mStr.substring(0, limit) : mStr;

}


publicstatic?String getTel(Context context) {// 獲取手機(jī)號(hào)碼,很多手機(jī)獲取不到

TelephonyManager telManager = (TelephonyManager) context

.getSystemService(Context.TELEPHONY_SERVICE);

return?telManager.getLine1Number();

}


publicstatic?String getMac(Context context) {// 獲取時(shí)機(jī)mac地址

final?WifiManager wifi = (WifiManager) context

.getSystemService(Context.WIFI_SERVICE);

if?(wifi !=null) {

WifiInfo info = wifi.getConnectionInfo();

if?(info.getMacAddress() !=null) {

return?info.getMacAddress().toLowerCase(Locale.ENGLISH)

.replace(":","");

}

return"";

}

return"";

}


/**

* 將 像素 轉(zhuǎn)換成dp

*?

* @param pxValue

*? ? ? ? ? ? 像素

* @returndp

*/

public?static?int?px2dip(int?pxValue) {

final?float?scale =?context.getResources().getDisplayMetrics().density;

return?(int) (pxValue / scale + 0.5f);

}


/**

* 將 畫(huà)素 轉(zhuǎn)換成sp

*?

* @param pixel

* @returnsp

*/

publicstaticint?px2sp(int?px) {

float?scaledDensity =context.getResources().getDisplayMetrics().scaledDensity;

return?(int) (px / scaledDensity);

}


/**

* 將 dip 轉(zhuǎn)換成畫(huà)素px

*?

* @param dipValue

*? ? ? ? ? ? dip 像素的值

* @return 畫(huà)素px

*/

public?static?int?dip2px(float?dipValue) {

final?float?scale =?context.getResources().getDisplayMetrics().density;

return?(int) (dipValue * scale + 0.5f);

}


public?static?int[][] getViewsPosition(List<View> views) {

int[][] location =newint[views.size()][2];

for?(int?index = 0; index < views.size(); index++) {

views.get(index).getLocationOnScreen(location[index]);

}

return?location;

}


/**

* 傳入一個(gè)view,返回一個(gè)int數(shù)組來(lái)存放 view在手機(jī)屏幕上左上角的絕對(duì)坐標(biāo)

*?

* @param views

*? ? ? ? ? ? 傳入的view

* @return 返回int型數(shù)組,location[0]表示x,location[1]表示y

*/

public?static?int[] getViewPosition(View view) {

int[] location =newint[2];

view.getLocationOnScreen(location);

return?location;

}


/**

* onTouch界面時(shí)指尖在views中的哪個(gè)view當(dāng)中

*?

* @param event

*? ? ? ? ? ?ontouch事件

* @param views

*? ? ? ? ? ? view list

* @return view

*/

public?static?View getOnTouchedView(MotionEvent event, List<View> views) {

int[][] location = getViewsPosition(views);

for?(int?index = 0; index < views.size(); index++) {

if?(event.getRawX() > location[index][0]

&& event.getRawX() < location[index][0]

+ views.get(index).getWidth()

&& event.getRawY() > location[index][1]

&& event.getRawY() < location[index][1]

+ views.get(index).getHeight()) {

return?views.get(index);

}

}

returnnull;

}


/**

* 將傳進(jìn)的圖片存儲(chǔ)在手機(jī)上,并返回存儲(chǔ)路徑

*?

* @param photo

*? ? ? ? ? ? Bitmap 類(lèi)型,傳進(jìn)的圖片

* @return String 返回存儲(chǔ)路徑

*/

public?static?String savePic(Bitmap photo, String name, String path) {

ByteArrayOutputStream baos =?new?ByteArrayOutputStream();?// 創(chuàng)建一個(gè)

//?outputstream

// 來(lái)讀取文件流

photo.compress(Bitmap.CompressFormat.PNG, 100, baos);// 把 bitmap 的圖片轉(zhuǎn)換成

//?jpge

// 的格式放入輸出流中

byte[] byteArray = baos.toByteArray();

String saveDir = Environment.getExternalStorageDirectory()

.getAbsolutePath();

File dir =?new?File(saveDir +"/"?+ path);// 定義一個(gè)路徑

if?(!dir.exists()) {// 如果路徑不存在,創(chuàng)建路徑

dir.mkdir();

}

File file =?new?File(saveDir, name +".png");// 定義一個(gè)文件

if?(file.exists())

file.delete();?// 刪除原來(lái)有此名字文件,刪除

try?{

file.createNewFile();

FileOutputStream fos;

fos =?new?FileOutputStream(file);// 通過(guò) FileOutputStream 關(guān)聯(lián)文件

BufferedOutputStream bos =?new?BufferedOutputStream(fos);?// 通過(guò)?bos

// 往文件里寫(xiě)東西

bos.write(byteArray);

bos.close();

}?catch?(FileNotFoundException e) {

e.printStackTrace();

}?catch?(IOException e) {

e.printStackTrace();

}

return?file.getPath();

}


/**

* 回收 bitmap 減小系統(tǒng)占用的資源消耗

*/

public?static?void?destoryBimap(Bitmap photo) {

if?(photo !=null?&& !photo.isRecycled()) {

photo.recycle();

photo =?null;

}

}


/**

* 將輸入字串做 md5 編碼

*?

* @param s

*? ? ? ? ? ? : 欲編碼的字串

* @return 編碼後的字串, 如失敗, 返回 ""

*/

public?static?String md5(String s) {

try?{

// Create MD5 Hash

MessageDigest digest = java.security.MessageDigest

.getInstance("MD5");

digest.update(s.getBytes("UTF-8"));

byte?messageDigest[] = digest.digest();


// Create Hex String

StringBuffer hexString =?new?StringBuffer();

for?(byte?b : messageDigest) {

if?((b & 0xFF) < 0x10)

hexString.append("0");

hexString.append(Integer.toHexString(b & 0xFF));

}

return?hexString.toString();

}?catch?(NoSuchAlgorithmException e) {

return"";

}?catch?(UnsupportedEncodingException e) {

return"";

}

}


publicstaticboolean?isNumber(char?c) {// 是否是數(shù)字

boolean?isNumer =false;

if?(c >=?'0'?&& c <=?'9') {

isNumer =?true;

}

return?isNumer;

}


publicstaticboolean?isEmail(String strEmail) {// 是否是正確的郵箱地址

String checkemail ="^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";


Pattern pattern = Pattern.compile(checkemail);


Matcher matcher = pattern.matcher(strEmail);


return?matcher.matches();

}


publicstaticboolean?isNull(String string)// 字符串是否為空

{

if?(null?== string ||"".equals(string)) {

returnfalse;

}

returntrue;

}


publicstaticboolean?isLenghtOk(String string,int?max,int?min)// 字符串長(zhǎng)度檢測(cè)

{

if?(null?!= string) {

if?(string.length() > max || string.length() < min) {

returnfalse;

}

}

returntrue;

}


publicstaticboolean?isLenghtOk(String string,int?max)// 字符串長(zhǎng)度是否

{

if?(null?!= string) {

if?(string.length() > max) {

returnfalse;

}

}

returntrue;

}


//用一種外部格式的字體,字體文件放在assets下面的fonts下面,名字叫whsn.ttf

獲取字體樣式:Typeface?tencentTypeface=Typeface.createFromAsset(this.getAssets(), "fonts/whsn.ttf")

使用

textView.setTypeface(tencentTypeface);








/**

*activity管理類(lèi),保證應(yīng)用退出后,銷(xiāo)毀所有創(chuàng)建的activity

**/


/**

?* 應(yīng)用程序Activity管理類(lèi):用于Activity管理和應(yīng)用程序退出

?*?@author?liux?(http://my.oschina.net/liux)

?*?@version?1.0

?*?@created?2012-3-21

?*/

public?class?AppManager {

private?static?Stack<Activity>?activityStack;

private?static?AppManager?instance;

private?AppManager(){}

/**

* 單一實(shí)例

*/

public?static?AppManager getAppManager(){

if(instance==null){

instance=new?AppManager();

}

returninstance;

}

/**

* 添加Activity到堆棧

*/

public?void?addActivity(Activity activity){

if(activityStack==null){

activityStack=new?Stack<Activity>();

}

activityStack.add(activity);

}

/**

* 獲取當(dāng)前Activity(堆棧中最后一個(gè)壓入的)

*/

public?Activity currentActivity(){

Activity activity=activityStack.lastElement();

return?activity;

}

/**

* 結(jié)束當(dāng)前Activity(堆棧中最后一個(gè)壓入的)

*/

public?void?finishActivity(){

Activity activity=activityStack.lastElement();

finishActivity(activity);

}

/**

* 結(jié)束指定的Activity

*/

public?void?finishActivity(Activity activity){

if(activity!=null){

activityStack.remove(activity);

activity.finish();

activity=null;

}

}

/**

* 結(jié)束指定類(lèi)名的Activity

*/

public?void?finishActivity(Class<?> cls){

for?(Activity activity :activityStack) {

if(activity.getClass().equals(cls) ){

finishActivity(activity);

}

}

}

/**

* 結(jié)束所有Activity

*/

public?void?finishAllActivity(){

for?(int?i = 0, size =activityStack.size(); i < size; i++){

? ? ? ? ? ??if?(null?!=activityStack.get(i)){

? ? ? ? ? ??activityStack.get(i).finish();

? ? ? ? ? ? }

? ? }

activityStack.clear();

}

/**

* 退出應(yīng)用程序

*/

public?void?AppExit(Context context) {

try?{

finishAllActivity();

ActivityManager activityMgr= (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);

activityMgr.restartPackage(context.getPackageName());

System.exit(0);

}?catch?(Exception e) {}

}

}



//字符串相關(guān)工具類(lèi)

private?finalstatic?ThreadLocal<SimpleDateFormat>dateFormater?=new?ThreadLocal<SimpleDateFormat>() {

@Override

protected?SimpleDateFormat initialValue() {

return?new?SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

}

};


private?final?static?ThreadLocal<SimpleDateFormat>dateFormater2?=new?ThreadLocal<SimpleDateFormat>() {

@Override

protected?SimpleDateFormat initialValue() {

return?new?SimpleDateFormat("yyyy-MM-dd");

}

};

/**

* 將字符串轉(zhuǎn)位日期類(lèi)型

*?@param?sdate

*?@return

*/

public?static?Date toDate(String sdate) {

try?{

return?dateFormater.get().parse(sdate);

}?catch?(ParseException e) {

returnnull;

}

}

/**

* 以友好的方式顯示時(shí)間

*?@param?sdate

*?@return

*/

public?static?String friendly_time(String sdate) {

Date time = toDate(sdate);

if(time ==null) {

return"Unknown";

}

String ftime =?"";

Calendar cal = Calendar.getInstance();

//判斷是否是同一天

String curDate =?dateFormater2.get().format(cal.getTime());

String paramDate =?dateFormater2.get().format(time);

if(curDate.equals(paramDate)){

int?hour = (int)((cal.getTimeInMillis() - time.getTime())/3600000);

if(hour == 0)

ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000,1)+"分鐘前";

else?

ftime = hour+"小時(shí)前";

return?ftime;

}

long?lt = time.getTime()/86400000;

long?ct = cal.getTimeInMillis()/86400000;

int?days = (int)(ct - lt);

if(days == 0){

int?hour = (int)((cal.getTimeInMillis() - time.getTime())/3600000);

if(hour == 0)

ftime = Math.max((cal.getTimeInMillis() - time.getTime()) / 60000,1)+"分鐘前";

else?

ftime = hour+"小時(shí)前";

}

else?if(days == 1){

ftime =?"昨天";

}

else?if(days == 2){

ftime =?"前天";

}

else?if(days > 2 && days <= 10){?

ftime = days+"天前";

}

else?if(days > 10){

ftime =?dateFormater2.get().format(time);

}

return?ftime;

}

/**

* 判斷給定字符串時(shí)間是否為今日

*?@param?sdate

*?@return?boolean

*/

public?static?boolean?isToday(String sdate){

boolean?b =false;

Date time = toDate(sdate);

Date today =?new?Date();

if(time !=null){

String nowDate =?dateFormater2.get().format(today);

String timeDate =?dateFormater2.get().format(time);

if(nowDate.equals(timeDate)){

b =?true;

}

}

return?b;

}

/**

* 判斷給定字符串是否空白串。

* 空白串是指由空格、制表符、回車(chē)符、換行符組成的字符串

* 若輸入字符串為null或空字符串,返回true

*?@param?input

*?@return?boolean

*/

public?static?boolean?isEmpty( String input )?

{

if?( input ==null?||"".equals( input ) )

returntrue;

for?(?int?i = 0; i < input.length(); i++ )?

{

char?c = input.charAt( i );

if?( c !=' '?&& c !='\t'?&& c !='\r'?&& c !='\n'?)

{

returnfalse;

}

}

returntrue;

}


/**

* 判斷是不是一個(gè)合法的電子郵件地址

*?@param?email

*?@return

*/

public?static?boolean?isEmail(String email){

if(email ==null?|| email.trim().length()==0)?

returnfalse;

? ??returnemailer.matcher(email).matches();

}

/**

* 字符串轉(zhuǎn)整數(shù)

*?@param?str

*?@param?defValue

*?@return

*/

public?static?int?toInt(String str,?int?defValue) {

try{

return?Integer.parseInt(str);

}catch(Exception e){}

return?defValue;

}

/**

* 對(duì)象轉(zhuǎn)整數(shù)

*?@param?obj

*?@return?轉(zhuǎn)換異常返回 0

*/

public?static?int?toInt(Object obj) {

if(obj==null)return?0;

return?toInt(obj.toString(),0);

}

/**

* 對(duì)象轉(zhuǎn)整數(shù)

*?@param?obj

*?@return?轉(zhuǎn)換異常返回 0

*/

public?static?long?toLong(String obj) {

try{

return?Long.parseLong(obj);

}catch(Exception e){}

return?0;

}

/**

* 字符串轉(zhuǎn)布爾值

*?@param?b

*?@return?轉(zhuǎn)換異常返回 false

*/

public?static?boolean?toBool(String b) {

try{

return?Boolean.parseBoolean(b);

}catch(Exception e){}

returnfalse;

}




/**

* 獲取當(dāng)前網(wǎng)絡(luò)類(lèi)型

* @return 0:沒(méi)有網(wǎng)絡(luò) ? 1:WIFI網(wǎng)絡(luò) ? 2:WAP網(wǎng)絡(luò)? ? 3:NET網(wǎng)絡(luò)

*/

public?int?getNetworkType() {

int?netType = 0;

ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();

if?(networkInfo ==null) {

return?netType;

}

int?nType = networkInfo.getType();

if?(nType == ConnectivityManager.TYPE_MOBILE) {

String extraInfo = networkInfo.getExtraInfo();

if(!StringUtils.isEmpty(extraInfo)){

if?(extraInfo.toLowerCase().equals("cmnet")) {

netType =?NETTYPE_CMNET;

}?else?{

netType =?NETTYPE_CMWAP;

}

}

}?else?if?(nType == ConnectivityManager.TYPE_WIFI) {

netType =?NETTYPE_WIFI;

}

return?netType;

}



//啟動(dòng)一個(gè)已安裝應(yīng)用(知道包名和入口activity)

ComponentName componentName=new?ComponentName("應(yīng)用的包名","應(yīng)用入口activity");?

//ComponentName componentName=new?ComponentName("com.hck.test",?"com.hck.test.MainActivity");

?? ? ? ? Intent intent=new?Intent();

?? ? ? ? intent.setComponent(componentName);

?? ? ? ? startActivity(intent);





?// 獲取系統(tǒng)內(nèi)的所有程序信息

? Intent mainintent =?new?Intent(Intent.ACTION_MAIN,?null);

? mainintent.addCategory(Intent.CATEGORY_LAUNCHER);

? List<PackageInfo> ? packageinfo =?this.getPackageManager().getInstalledPackages(0);



//獲取meta-data 里面的值

public static String getMetaValue(Context context, String metaKey) {
??Bundle metaData = null;
??String apiKey = null;
??if (context == null || metaKey == null) {
???return null;
??}
??try {
???ApplicationInfo ai = context.getPackageManager()
?????.getApplicationInfo(context.getPackageName(),
???????PackageManager.GET_META_DATA);
???if (null != ai) {
????metaData = ai.metaData;
???}
???if (null != metaData) {
????apiKey = metaData.getString(metaKey);
???}
??} catch (NameNotFoundException e) {

??}
??
??return apiKey;
?}

?

//? 連續(xù)點(diǎn)擊2次退出程序

if(event.getAction() == KeyEvent.ACTION_DOWN && KeyEvent.KEYCODE_BACK == keyCode) {
????long currentTime = System.currentTimeMillis();
????if((currentTime-touchTime)>=waitTime) {
?????Toast.makeText(this, "再按一次退出", Toast.LENGTH_SHORT).show();
?????touchTime = currentTime;
?????return true;
????}else {
?????AppManager.getAppManager().appExit();
?????finish();
?????return false;
????}
????
???}
?? return true;



//實(shí)現(xiàn)打電話(huà)

Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:"+phoneNumber));??
??????? this.startActivity(intent);

總結(jié)

以上是生活随笔為你收集整理的android 常用方法集合的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲精品18p | 亚洲青涩网 | 午夜免费小视频 | 日干夜干天天干 | 男女无遮挡猛进猛出 | 成年人的免费视频 | 在线观看一级片 | 久久久久成人精品免费播放动漫 | 日本一区二区三区在线视频 | 91一区二区在线观看 | 日韩经典午夜福利发布 | 成年人网站免费观看 | 六月婷婷激情网 | 国产精品成人3p一区二区三区 | 成人在线视频播放 | 无套内谢的新婚少妇国语播放 | 国产-第1页-浮力影院 | 国产欧美专区 | 欧美日韩一区二区在线观看视频 | 无码一区二区波多野结衣播放搜索 | 国产精品电影一区二区三区 | 俺去日 | 视频丨9l丨白浆 | 天天综合91 | 老熟女重囗味hdxx69 | 99在线国产 | 久久av高潮av无码av喷吹 | 污片在线看 | 午夜裸体性播放 | 草久久久久 | 久热草| 精品在线观看免费 | 男女深夜福利 | 一区二区在线视频免费观看 | 日韩丰满少妇无码内射 | 午夜精品久久久久久久99黑人 | 色婷婷综合在线 | 国产白嫩美女无套久久 | 日本一级黄 | 黄色av不卡 | 天堂8在线 | 国产精品污www在线观看 | 丁香花免费高清完整在线播放 | 亚洲免费av一区 | 在线成人免费电影 | 九九九免费 | 亚洲综合精品一区 | 成人小视频在线看 | 光明影院手机版在线观看免费 | 无码人妻精品一区二区三区9厂 | 在线欧美一区二区 | 成人免费看毛片 | 宅宅少妇无码 | 国产免费自拍视频 | 欧美国产另类 | 丰满人妻老熟妇伦人精品 | 亚洲欧洲综合网 | 亚洲精品粉嫩小泬20p | 久99| 四虎影视永久 | 亚洲欧美第一页 | 1000部做爰免费视频 | 亚洲国产日韩一区无码精品久久久 | 视频毛片| 亚州精品国产精品乱码不99按摩 | 国产精品久久久久不卡 | 国 产 黄 色 大 片 | 黄色的网站在线观看 | 国产网址 | 看污网站 | 长篇h版少妇沉沦交换 | 69亚洲精品久久久蜜桃小说 | 午夜无遮挡 | 国产人妻777人伦精品hd | 久久亚洲av永久无码精品 | 色黄网站| 欧美熟妇交换久久久久久分类 | 亚洲AV成人午夜无码精品久久 | 91视频看 | 国产精品女教师 | 人人操日日干 | 国产精品久久久一区二区三区 | 国产日韩欧美91 | 成人午夜福利视频 | np视频| 得得的爱在线视频 | 欧美黑人猛交 | 国产激情在线视频 | 啪啪免费av | 亚洲欧美日韩成人 | 免费的av网站 | 人人做人人爱人人爽 | 亚洲第一精品网站 | 99国产超薄肉色丝袜交足 | 亚洲av综合永久无码精品天堂 | 日韩一区二区三区网站 | 免费av看片 | 91成人在线观看喷潮 | 天天上天天干 |