▼Androidメモ▼
ユーティリティ


システム情報
    //スタックトレースの出力
public static void out(Exception e) {
android.util.Log.e("debug",e.toString());
for (StackTraceElement ste:e.getStackTrace()) {
android.util.Log.e("debug"," "+ste);
}
}

//端末IDの取得
public static String getPhoneID(Context context) {
return android.provider.Settings.System.getString(
context.getContentResolver(),
android.provider.Settings.System.ANDROID_ID);
}

//メモリの表示
public static void memory(Context context) {
//空きLinuxヒープサイズ
ActivityManager.MemoryInfo info=new ActivityManager.MemoryInfo();
ActivityManager am=((ActivityManager)context.
getSystemService(Activity.ACTIVITY_SERVICE));
am.getMemoryInfo(info);
long linuxHeap=info.availMem;
android.util.Log.e("debug","空きLinuxヒープサイズ>"+
num2mem(linuxHeap));

//アプリケーションヒープサイズ
long nativeHeap=Debug.getNativeHeapAllocatedSize();
Runtime runtime=Runtime.getRuntime();
long javaHeap=runtime.totalMemory()-runtime.freeMemory();
long appHeap=nativeHeap+javaHeap;
android.util.Log.e("debug","アプリケーションヒープサイズ(ネイティブ+Java)>"+
num2mem(appHeap)+"("+num2mem(nativeHeap)+"+"+num2mem(javaHeap)+")");
}

//数値→メモリ
private static String num2mem(long num) {
if (num<1024) return num+"B";
num/=1024;
if (num<1024) return num+"KB";
num/=1024;
return num+"MB";
}

//乱数の取得
private static Random rand=new Random();
public static int rand(int num) {
return (rand.nextInt()>>>1)%num;
}

//ビュー→ビットマップ
public static Bitmap view2bmp(View view) {
view.setDrawingCacheEnabled(true);
return view.getDrawingCache();
}

//文字列→drawableのリソースID
public static int str2drawableID(Context context,String str) {
return context.getResources().getIdentifier(
str,"drawable",context.getPackageName());
}

//文字列→rawのリソースID
public static int str2rawID(Context context,String str) {
return context.getResources().getIdentifier(
str,"raw",context.getPackageName());
}

//画面サイズの取得
public static int[] getScreenSize(Context context) {
WindowManager wm=(WindowManager)
context.getSystemService(Context.WINDOW_SERVICE);
return new int[]{
wm.getDefaultDisplay().getWidth(),
wm.getDefaultDisplay().getHeight()};
}

//ステータスバーの高さの取得
public static int getStatusBarH(Activity activity) {
Rect area=new Rect();
Window window=activity.getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(area);
return area.top;
}

文字列処理
    //文字列を任意の文字で分割
public static String[] parseStr(String str,char sep) {
return str.split("\\Q"+sep+"\\E",-1);
}

//特殊文字の削除
public static String deleteSpecialChar(String str) {
return str.replaceAll("[\r\n\t]","");
}

//全角空文字を含むtrim
public static String trim(String str) {
return str.replaceAll("^[  ]+|[  ]+$","");
}

 //文字列→バイトデータ
public static byte[] str2data(String str) {
return str.getBytes();
}

//バイトデータ→文字列
public static String data2str(byte[] data) {
return new String(data);
}

プリファレンス
    //プリファレンスの書き込み
public static void writePref(Context context,String key,String value) {
SharedPreferences pref=context.getSharedPreferences(
"test",Context.MODE_PRIVATE);
SharedPreferences.Editor editor=pref.edit();
editor.putString(key,value);
editor.commit();
}

//プリファレンスの読み込み
public static String readPref(Context context,String key) {
SharedPreferences pref=context.getSharedPreferences(
"test",Context.MODE_PRIVATE);
return pref.getString(key,"");
}

ファイルの入出力
    //バイトデータ→ファイル
public static void data2file(byte[] w,String fileName)
throws Exception {
FileOutputStream fos=null;
try {
fos=new FileOutputStream(fileName);
fos.write(w);
fos.close();
} catch (Exception e) {
if (fos!=null) fos.close();
throw e;
}
}

//ファイル→バイトデータ
public static byte[] file2data(String fileName)
throws Exception {
int size;
byte[] w=new byte[1024];
FileInputStream fin=null;
ByteArrayOutputStream out=null;
try {
fin=new FileInputStream(fileName);
out=new ByteArrayOutputStream();
while (true) {
size=fin.read(w);
if (size<=0) break;
out.write(w,0,size);
}
fin.close();
out.close();
return out.toByteArray();
} catch (Exception e) {
try {
if (fin!=null) fin.close();
if (out!=null) out.close();
} catch (Exception e2) {
}
throw e;
}
}

//入力ストリーム→ファイル
public static void in2file(InputStream in,String fileName)
throws Exception {
int size;
byte[] w=new byte[1024];
FileOutputStream fos=null;
try {
fos=new FileOutputStream(fileName);
while (true) {
size=in.read(w);
if (size<=0) break;
fos.write(w,0,size);
};
fos.close();
in.close();
} catch (Exception e) {
try {
if (in !=null) in.close();
if (fos!=null) fos.close();
} catch (Exception e2) {
}
throw e;
}
}

//ファイル→入力ストリーム
public static InputStream file2in(String fileName)
throws Exception {
return new FileInputStream(fileName);
}


//RawリソースID→ファイル
public static void raw2file(Context context,
int resID,String fileName) throws Exception {
InputStream in=null;
try {
in=context.getResources().openRawResource(resID);
in2file(in,fileName);
} catch (Exception e) {
try {
if (in!=null)in.close();
} catch (Exception e2) {
}
}
}

//assets→ファイル
public static void assets2file(Context context,
String assetPath,String filePath)
throws Exception {
InputStream in=null;
try {
in=context.getAssets().open(assetPath);
in2file(in,filePath);
} catch (Exception e) {
try {
if (in!=null) in.close();
} catch (Exception e2) {
}
throw e;
}
}

ファイルシステム

    //データフォルダのファイルパスの生成
public static String filePath(String fileName) {
return Environment.getDataDirectory()+"/"+fileName;
}

//SDカードのファイルパスの生成
public static String sdPath(String fileName) {
return Environment.getExternalStorageDirectory()+"/"+fileName;
}

//ファイルの存在チェック
public static boolean existsFile(String path) {
return (new File(path)).exists();
}

//ファイルの削除
public static boolean deleteFile(String path) {
return deleteFile(new File(path));
}

//ファイルの削除
public static boolean deleteFile(File dirOrFile) {
if (dirOrFile.isDirectory()) {
String[] children=dirOrFile.list();
for (int i=0;i<children.length;i++) {
if (!deleteFile(new File(dirOrFile,children[i]))) {
return false;
}
}
}
return dirOrFile.delete();
}

//ディレクトリの生成
public static void mkdir(String path) {
(new File(path)).mkdir();
}

ビットマップ
    //リソース→ビットマップ
public static Bitmap res2bmp(Context context,int resID) {
return BitmapFactory.decodeResource(
context.getResources(),resID);
}

//バイトデータ→ビットマップ
public static Bitmap data2bmp(byte[] data) {
return BitmapFactory.decodeByteArray(data,0,data.length);
}

//ビットマップ→バイトデータ
public static byte[] bmp2data(Bitmap src,
Bitmap.CompressFormat format,int quality) {
ByteArrayOutputStream os=new ByteArrayOutputStream();
src.compress(format,quality,os);
return os.toByteArray();
}

//ビットマップのリサイズ
public static Bitmap resizeBitmap(Bitmap bmp,int w,int h) {
Bitmap result=Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(result);
BitmapDrawable drawable=new BitmapDrawable(bmp);
drawable.setBounds(0,0,w,h);
drawable.draw(canvas);
return result;
}

//ビットマップのカット
public static Bitmap cutBitmap(Bitmap bmp,int x,int y,int w,int h) {
Bitmap result=Bitmap.createBitmap(w,h,Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(result);
canvas.drawBitmap(bmp,-x,-y,null);
return result;
}

//ビットマップの回転(270度)
public static Bitmap rotateBitmap270(Bitmap bmp) {
int w=bmp.getWidth();
int h=bmp.getHeight();
Bitmap result=Bitmap.createBitmap(h,w,Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(result);
canvas.rotate(270,0,0);
canvas.drawBitmap(bmp,-w,0,null);
return result;
}

//ビットマップの回転(90度)
public static Bitmap rotateBitmap90(Bitmap bmp) {
int w=bmp.getWidth();
int h=bmp.getHeight();
Bitmap result=Bitmap.createBitmap(h,w,Bitmap.Config.ARGB_8888);
Canvas canvas=new Canvas(result);
canvas.rotate(90,0,0);
canvas.drawBitmap(bmp,0,-h,null);
return result;
}

//ファイル→ビットマップ(最大サイズ指定)
public static Bitmap file2bmp(String path,int maxW,int maxH) {
BitmapFactory.Options options;
InputStream in=null;
try {
//画像サイズの取得
options=new BitmapFactory.Options();
options.inJustDecodeBounds=true;
in=Util.file2in(path);
BitmapFactory.decodeStream(in,null,options);
in.close();
int scaleW=options.outWidth /maxW+1;
int scaleH=options.outHeight/maxH+1;
int scale =Math.max(scaleW,scaleH);

//画像の読み込み
options=new BitmapFactory.Options();
options.inJustDecodeBounds=false;
options.inSampleSize=scale;
in=Util.file2in(path);
Bitmap bmp=BitmapFactory.decodeStream(in,null,options);
in.close();
return bmp;
} catch (Exception e) {
try {
if (in!=null) in.close();
} catch (Exception e2) {
}
return null;
}
}

//ファイル→ビットマップ(最大サイズ指定)
public static Bitmap uri2bmp(Context context,Uri uri,int maxW,int maxH) {
BitmapFactory.Options options;
InputStream in=null;
try {
//画像サイズの取得
options=new BitmapFactory.Options();
options.inJustDecodeBounds=true;
in=context.getContentResolver().openInputStream(uri);
BitmapFactory.decodeStream(in,null,options);
in.close();
int scaleW=options.outWidth /maxW+1;
int scaleH=options.outHeight/maxH+1;
int scale =Math.max(scaleW,scaleH);

//画像の読み込み
options=new BitmapFactory.Options();
options.inJustDecodeBounds=false;
options.inSampleSize=scale;
in=context.getContentResolver().openInputStream(uri);
Bitmap bmp=BitmapFactory.decodeStream(in,null,options);
in.close();
return bmp;
} catch (Exception e) {
try {
if (in!=null) in.close();
} catch (Exception e2) {
}
return null;
}
}

//ビットマップのフィルタ
public static Bitmap filterBmp(Bitmap bmp,int color,PorterDuff.Mode mode) {
int w=bmp.getWidth();
int h=bmp.getHeight();
Bitmap result=Bitmap.createBitmap(w,h,Config.ARGB_8888);
Canvas c=new Canvas(result);
BitmapDrawable bd=new BitmapDrawable(bmp);
bd.setBounds(0,0,w,h);
bd.setColorFilter(color,mode);
bd.draw(c);
return result;
}

HTTPの入力
    //HTTP(GET)→バイトデータ
public static byte[] http2data(String path) throws Exception {
int size;
byte[] w=new byte[1024];
HttpURLConnection c=null;
InputStream in=null;
ByteArrayOutputStream out=null;
try {
//HTTP接続のオープン
URL url=new URL(path);
c=(HttpURLConnection)url.openConnection();
c.setRequestMethod("GET");
c.connect();
in=c.getInputStream();

//バイト配列の読み込み
out=new ByteArrayOutputStream();
while (true) {
size=in.read(w);
if (size<=0) break;
out.write(w,0,size);
}
out.close();

//HTTP接続のクローズ
in.close();
c.disconnect();
return out.toByteArray();
} catch (Exception e) {
try {
if (c!=null) c.disconnect();
if (in!=null) in.close();
if (out!=null) out.close();
} catch (Exception e2) {
}
throw e;
}
}

//HTTP(POST)→バイトデータ
public static byte[] http2data(String path,byte[] body) throws Exception {
int size;
byte[] w=new byte[1024];
HttpURLConnection c=null;
InputStream in=null;
ByteArrayOutputStream out=null;
try {
//HTTP接続のオープン
URL url=new URL(path);
c=(HttpURLConnection)url.openConnection();
c.setRequestMethod("POST");

//バイト配列の書き込み
c.setDoOutput(true);
OutputStream bout=c.getOutputStream();
bout.write(body);
bout.flush();
bout.close();

//バイト配列の読み込み
in=c.getInputStream();
out=new ByteArrayOutputStream();
while (true) {
size=in.read(w);
if (size<=0) break;
out.write(w,0,size);
}
out.close();
in.close();

//HTTP接続のクローズ
c.disconnect();
byte[] result=out.toByteArray();
return result;
} catch (Exception e) {
try {
if (c!=null) c.disconnect();
if (in!=null) in.close();
if (out!=null) out.close();
} catch (Exception e2) {
}
throw e;
}
}

//文字エンコード
public static String encode(String word) {
try {
return URLEncoder.encode(word,"UTF-8");
} catch (Exception e) {
return word;
}
}

//文字デコード
public static String decode(String word) {
try {
return URLDecoder.decode(word,"UTF-8");
} catch (Exception e) {
return word;
}
}

アクティビティ
    //最近起動したタスクの取得
public static List<ActivityManager.RecentTaskInfo> getRecentTask(Context context,int maxNum) {
ActivityManager am=(ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
return am.getRecentTasks(maxNum,ActivityManager.RECENT_WITH_EXCLUDED);
}

//アクティビティの起動
public static void startActivity(Context context,ComponentName componentName)
throws ActivityNotFoundException {
Intent intent=new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setComponent(componentName);
context.startActivity(intent);
}

//アクティビティの起動
public static void startActivity(Context context,String packageName,String className)
throws ActivityNotFoundException {
startActivity(context,new ComponentName(packageName,className));
}

//アプリ名の取得
public static String getAppName(Context context,ComponentName componentName) {
try {
ApplicationInfo ai=context.getPackageManager().getActivityInfo(
componentName,PackageManager.GET_ACTIVITIES).applicationInfo;
return (String)context.getPackageManager().getApplicationLabel(ai);
} catch (NameNotFoundException e) {
}
return null;
}

//アプリアイコンの取得
public static Drawable getAppIcon(Context context,ComponentName componentName) {
try {
ApplicationInfo ai=context.getPackageManager().getActivityInfo(
componentName, PackageManager.GET_ACTIVITIES).applicationInfo;
return context.getPackageManager().getApplicationIcon(ai);
} catch (NameNotFoundException e) {
}
return null;
}


//インテントのパラメータの表示
private void showIntentParams() {
Bundle extras=getIntent().getExtras();
if (extras!=null) {
Object[] keys=extras.keySet().toArray();
for (int i=0;i<keys.length;i++) {
android.util.Log.e("",keys[i]+"="+extras.getString((String)keys[i]));
}
}
}

//アクティビティ情報の取得
public static ActivityInfo getActivityInfo(ComponentName componentName) {
PackageManager pm=U.activity.getPackageManager();
try {
return pm.getActivityInfo(componentName,0);
} catch (NameNotFoundException e) {
}
return null;
}

トースト・ダイアログ
    //トーストの表示
public static void toast(Context context,String text) {
Toast.makeText(context,text,Toast.LENGTH_SHORT).show();
}

//ダイアログの表示
private static void showDialog(Context context,String title,String text) {
AlertDialog.Builder ad=new AlertDialog.Builder(context);
ad.setTitle(title);
ad.setMessage(text);
ad.setPositiveButton("OK",null);
ad.show();
}

//Yes/Noダイアログの表示
public static void showYesNoDialog(Context context,
String title,String text,DialogInterface.OnClickListener listener) {
AlertDialog.Builder ad=new AlertDialog.Builder(context);
ad.setTitle(title);
ad.setMessage(text);
ad.setPositiveButton("OK",listener);
ad.setNegativeButton("Cancel",listener);
ad.create();
ad.show();
}

キーボード

    //requestFocus()時にキーボードを開くように設定
public static void readyOpenKeyboard(final Context context,final EditText editText) {
final Handler handler=new Handler();
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v,boolean hasFocus) {
if (!hasFocus) return;
handler.post(new Runnable(){public void run() {
InputMethodManager imm=(InputMethodManager)
context.getSystemService(Activity.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText,
InputMethodManager.SHOW_IMPLICIT);
}});
}
});
}

//キーボードを閉じる
public static void closeKeyboard(Context context,View view) {
InputMethodManager inputMethodManager=
(InputMethodManager)context.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),0);
}

ウィンドウ設定
  利用例
背景ブラー
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_BLUR_BEHIND,
WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
スクリーン表示のキープ(スリープなし)をON
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
スクリーン表示のキープ(スリープなし)をOFF
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
フルスクリーン
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
フルスクリーンテーマ
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"

リソース命令
  利用例
リソース名をリソースIDに変換
int resID=getResources().getIdentifier("icon","drawable",getPackageName());



−戻る−