توابع و کلاسهای کوچیک و مفید ( مشارکت کنید )
با سلام
در این تایپیک قصد دارم یکسری توابع و کلاسهای مفید رو که خودم در برنامه ها استفاده میکنم ، اینجا بزارم
تا مورد استفاده دوستان قرار بگیره
البته این رو هم بگم که بنده توابع رو بسته به نیاز خودم طراحی میکنم .
خیلی از این توابع رو میشه با یه خورده وقت گذاشتن بیشتر بهتر پیاده سازی کرد .
بیشتر این توابع رو من خیلی وقت پیش نوشتم و هر موقع نیاز بشه فقط ازشون استفاده میکنم بازبینی دوباره نشده تا بهینه بشه
این توابع فقط برای ایده گرفتن میتونه مورد استفاده بشه و بسته به نیاز خودتون تغییرش بدین
برای هر تابع فقط در زیر همون پست نظر بدین از ارسال پست های جدید خودداری کنید
در صورتیکه برای یه تابع روش بهتری دارید یه تابع نوشته در سایت در یک تایپیک جداگانه منتشر کنید و لینکش رو در زیر پست همون تابع قرار بدید.
برای تشکر و تشویق به قرار دادن توابع بیشتر هم فقط کافیه لایک کنید و از اسپم جدا خودداری کنید
لیست توابع :
1. یه تابع کوچیک برای گرفتن تصاویر از پوشه asset
2. دو تابع برای تبدیل عکس ذخیره شده در دیتابیس بصورت bite[] به bitmap و drawable
3. بررسی وضعیت دسترسی به اینترنت
4. خواندن یک فایل متنی از پوشه assets
5. خواندن یک فایل متنی از پوشه raw
6. اشتراک فایل apk برنامه در داخل برنامه
7. تابع خروج از برنامه
8. کلاس اسکرول افقی که حالت پیش فرض اون سمت راست باشه.
9. ارسال بازخورد به فیس بوک
10. ارسال بازخورد به اینستگرام
11. خروج از برنامه با دوبار زدن دکمه بازگشت
12. کلاس تبدیل تقویم شمسی و میلادی با امکانات اسامی روز های هفته و ماه
13. حذف یک پوشه به همراه کلیه محتویاتش شامل فایل ها و پوشه ها
14. بررسی وضعیت دسترسی به فلاش دوربین
15. نمایش پیغام بصورت toast در هر جای برنامه
یه تابع کوچیک برای گرفتن تصاویر از پوشه asset
public static Bitmap getBitmapFromAsset(Context paramContext, String strName)
{
AssetManager assetManager = paramContext.getAssets();
InputStream istr = null;
try {
istr = assetManager.open(strName);
}
catch (IOException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(istr);
return bitmap;
}
دو تابع برای تبدیل عکس ذخیره شده در دیتابیس بصورت bite[] به bitmap و drawable
public static Drawable convertImageByteToDrawable(byte[] paramByte, String paramString)
{
return (Drawable) Drawable.createFromStream(new ByteArrayInputStream(paramByte), paramString);
}
public static Bitmap convertImageByteToBitmap(byte[] paramByte)
{
//Drawable localByteArrayInputStream = ConvertImageByteToDrawable(paramByte, paramString);
ByteArrayInputStream localByteArrayInputStream = new ByteArrayInputStream(paramByte);
//Drawable.createFromStream(localByteArrayInputStream, paramString);
return (Bitmap) BitmapFactory.decodeStream(localByteArrayInputStream);
}
بررسی نصب بودن یک برنامه
/**
* returns True OR False
* */
public static boolean isPackageInstalled(Context context, String packagename) {
PackageManager pm = context.getPackageManager();
ApplicationInfo appInfo;
try {
//pm.getPackageInfo(packagename, PackageManager.GET_ACTIVITIES);
appInfo = pm.getApplicationInfo(packagename, PackageManager.GET_ACTIVITIES);
return true;
}
catch (NameNotFoundException e) {
return false;
}
}
خیلی از موارد هست که اسم یک drawable رو داریم و میخوایم تصویر رو با اون عوض کنید یا بکگراند رو به اون تغییر بدیم
بهترین راه اینه که resourceid اش رو بدست بیارم و از توابع مربوطه استفاده کنیم :
public static int getResourceId(Context context, String identifier, String value) {
try {
int resourceId = context.getResources().getIdentifier(value, identifier, context.getPackageName());
return resourceId;
}
catch (Exception e) {
e.printStackTrace();
return 0;
}
}
مثال :
ImageView imgCat= (ImageView) findViewById(R.id.imgCat);
int resourceId = getResourceId(G.context, "drawable", item.icon);
if (resourceId > 0)
imgCat.setImageResource(resourceId);
else
imgCat.setVisibility(View.INVISIBLE);
خواندن یک فایل متنی از پوشه assets
/*
* Read text file from assets folder
*/
public static void readFileFromAssetsFolder(Context paramContext, String paramStringFileName, TextView paramViewTextView, Boolean paramBooleanShowHtml) throws IOException {
InputStream inputStream = paramContext.getAssets().open(paramStringFileName);
StringBuilder text = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
try {
String line;
while ((line = reader.readLine()) != null) {
text.append(line);
text.append('\n');
}
if (paramBooleanShowHtml)
paramViewTextView.setText(Html.fromHtml(text.toString()));
else
paramViewTextView.setText(text);
} finally {
reader.close();
}
}
خواندن فایل متنی از پوشه raw
/*
* Read text file from raw folder
*/
public static void readFileFromRawFolder(Context paramContext, int paramIntFileName, TextView paramViewTextView, Boolean paramBooleanShowHtml) throws IOException {
InputStream inputStream = paramContext.getResources().openRawResource(paramIntFileName);
StringBuilder text = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String line;
while ((line = reader.readLine()) != null) {
text.append(line);
text.append('\n');
}
if (paramBooleanShowHtml)
paramViewTextView.setText(Html.fromHtml(text.toString()));
else
paramViewTextView.setText(text);
} finally {
reader.close();
}
}
جسارتا
خواندن یک فایل متنی از asset
try { String body = new Scanner(G.appConfigs.currentActivity.getAssets().open("contact.txt")).useDelimiter("\\A").next(); }catch(Exception e){ Log.e(G.Logs.Error, "Error To Read 'contact.txt' In Asset: " + e); ExceptionHelper.catchMessage(e); }
ببخشید گفتم ما هم دانش کممون رو اشتراک بگذاریم
برای گرفتن (Android version) و API level
(Android version)ذخیره کردن آن در یک رشته (String) کد زیر:
String androidOS = Build.VERSION.RELEASE;
API LEVEL ذخیره کردن آن در یک رشته (int) کد زیر:
int currentapiVersion = android.os.Build.VERSION.SDK_INT;
اشتراک فایل apk برنامه در داخل برنامه
public static void sendAppItself(Activity paramActivity, String paramStringToastMsg) throws IOException {
Toast.makeText(paramActivity, paramStringToastMsg, Toast.LENGTH_LONG).show();
PackageManager pm = paramActivity.getPackageManager();
ApplicationInfo appInfo;
try {
appInfo = pm.getApplicationInfo(paramActivity.getPackageName(),
PackageManager.GET_META_DATA);
Intent sendBt = new Intent(Intent.ACTION_SEND);
// NOT THIS! sendBt.setType("application/vnd.android.package-archive");
sendBt.setType("*/*");
sendBt.putExtra(Intent.EXTRA_STREAM,
Uri.parse("file://" + appInfo.publicSourceDir));
Log.v("PACKAGEDIR: ", appInfo.publicSourceDir);
paramActivity.startActivity(Intent.createChooser(sendBt, "Share image using"));
// paramActivity.startActivity(sendBt);
}
catch (NameNotFoundException e1) {
e1.printStackTrace();
}
}
ارسال ایمیل از داخل برنامه به یک ایمیل مشخص و با استفاده از نرم افزارهای ارسال ایمیل گوشی
/*
* Send Email for feadback
*/
public static void sendEmailFeadback(Activity paramActivity, String paramStringToastMsg, String paramStringPackage) {
Toast.makeText(paramActivity, paramStringToastMsg, Toast.LENGTH_LONG).show();
Intent localIntent1 = new Intent("android.intent.action.SEND");
localIntent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
String str = "";
try
{
str = paramActivity.getPackageManager().getPackageInfo(paramActivity.getPackageName(), 0).versionName;
localIntent1.setType("plain/text");
String[] arrayOfString = new String[1];
arrayOfString[0] = "info@negahetazehco.com";
localIntent1.putExtra("android.intent.extra.EMAIL", arrayOfString);
localIntent1.putExtra("android.intent.extra.SUBJECT", paramStringPackage + str + " Feedback");
localIntent1.putExtra("android.intent.extra.TEXT", "\n\n\n<from " + paramStringPackage + " " + str + ">");
paramActivity.startActivity(Intent.createChooser(localIntent1, "Send mail..."));
}
catch (PackageManager.NameNotFoundException localNameNotFoundException)
{
localNameNotFoundException.printStackTrace();
}
catch (Exception e) {
e.printStackTrace();
}
}
ارسال نظر ، دیدن جزئیات برنامه ، نصب برنامه در بازار
/*
* Open app detail page in cafebazaar directly
*/
public static void openCafeBazaarFeadBack(Context paramContext, final String paramStringPackage, final String paramStringAction)
{
Intent inten;
if (paramStringAction.equals("rating"))
inten = new Intent(Intent.ACTION_EDIT); // submit rate for app
else if (paramStringAction.equals("detail"))
inten = new Intent(Intent.ACTION_VIEW); // view detail of app
else if (paramStringAction.equals("setup"))
inten = new Intent(Intent.ACTION_INSERT); // setup app directly
else
inten = new Intent(Intent.ACTION_VIEW); // view detail of app
inten.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
inten.setData(Uri.parse("bazaar://details?id=" + paramStringPackage));
paramContext.startActivity(inten);
}
catch (android.content.ActivityNotFoundException anfe) {
inten.setData(Uri.parse("http://cafebazaar.ir/app/?id=" + paramStringPackage));
paramContext.startActivity(inten);
}
catch (Exception e) {
e.printStackTrace();
}
}
تابع خروج از برنامه :
/*
* Exit Of App
*/
public static void AppExit()
{
G.CurrentActivity.finish();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
G.CurrentActivity.startActivity(intent);
System.exit(0);
}
حالت عمودی و افقی برنامه.
برای اینکه Activity به حالت عمودی (portrait) برود، باید کدهای زیر را در میان کدهای Activity بنویسیم :
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
برای اینکه Activity به حالت افقی (landscape) برود، باید کدهای زیر را در میان کدهای Activity بنویسیم :
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
با استفاده از کلاس SimpleDateFormat
فرض کنید که بخواهیم تاریخ و زمان فعلی را به صورت شکل کلی زیر در یک رشته (String) داشته باشیم (البته سال میلادی) :
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
String currentDateandTime = sdf.format(new Date());
بنابراین تاریخ و زمان فعلی در یک متغیر از جنس رشته (String) و با نام currentDateandTime ذخیره می شود.
yyyy --> سال (year)
MM --> ماه (month)
dd --> روز (day)
HH --> ساعت (hour)
mm --> دقیقه (minute)
ss --> ثانیه (second)
کلاس اسکرول افقی که حالت پیش فرض اون سمت راست باشه.
public class RightAlignedHorizontalScrollView extends HorizontalScrollView {
public RightAlignedHorizontalScrollView(Context context) {
super(context);
}
public RightAlignedHorizontalScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public RightAlignedHorizontalScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
scrollTo(getChildAt(0).getMeasuredWidth(), 0);
}
}
ارسال بازخورد به فیس بوک
/*
* Open facebook app or site for show app page
*/
public static Intent openFaceBookFeadBack(Context paramContext, String paramStringFaceBookProfile, String paramStringFaceBookPage)
{
Intent localIntent = null;
try
{
paramContext.getPackageManager().getPackageInfo("com.facebook.katana", 0);
localIntent = new Intent("android.intent.action.VIEW", Uri.parse("fb://profile/" + paramStringFaceBookProfile));
return localIntent;
}
catch (Exception localException)
{
while (true)
localIntent = new Intent("android.intent.action.VIEW", Uri.parse("https://www.facebook.com/" + paramStringFaceBookPage));
}
}
خروج از برنامه با دوبار زدن دکمه بازگشت
@Override
public void onBackPressed()
{
if (back_pressed + 2000 > System.currentTimeMillis()) {
super.onBackPressed();
AppExit();
}
else
Toast.makeText(context, "نمایش پیغام لمس دوباره کلید بازگشت جهت خروج", Toast.LENGTH_LONG).show();
back_pressed = System.currentTimeMillis();
}
/*
* Exit Of Application
*/
public static void AppExit()
{
G.CurrentActivity.finish();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
G.CurrentActivity.startActivity(intent);
System.exit(0);
}
ارسال بازخورد به اینستگرام
/*
* Open instagram app or site for show app page
*/
public static Intent openInstagramFeadBack(Context paramContext, String paramStringInstagramProfile, String paramStringInstagramPage)
{
Intent localIntent = paramContext.getPackageManager().getLaunchIntentForPackage("com.instagram.android");
try
{
paramContext.getPackageManager().getPackageInfo("com.instagram.android", 0);
localIntent.setComponent(new ComponentName("com.instagram.android", "com.instagram.android.activity.UrlHandlerActivity"));
localIntent.setData(Uri.parse("http://instagram.com/p/" + paramStringInstagramProfile + "/"));
return localIntent;
}
catch (Exception localException)
{
while (true)
localIntent = new Intent("android.intent.action.VIEW", Uri.parse("http://www.instagram.com/" + paramStringInstagramPage));
}
}
کلاس تبدیل تقویم شمسی و میلادی با امکانات اسامی روز های هفته و ماه
(البته این سورس را قبلا از اینترنت گرفته ام و خودم ننوشته ام ، منبع)
private class SolarCalendar {
public String strWeekDay = "";
public String strMonth = "";
int date;
int month;
int year;
public SolarCalendar()
{
Date MiladiDate = new Date();
calcSolarCalendar(MiladiDate);
}
public SolarCalendar(Date MiladiDate)
{
calcSolarCalendar(MiladiDate);
}
private void calcSolarCalendar(Date MiladiDate) {
int ld;
int miladiYear = MiladiDate.getYear() + 1900;
int miladiMonth = MiladiDate.getMonth() + 1;
int miladiDate = MiladiDate.getDate();
int WeekDay = MiladiDate.getDay();
int[] buf1 = new int[12];
int[] buf2 = new int[12];
buf1[0] = 0;
buf1[1] = 31;
buf1[2] = 59;
buf1[3] = 90;
buf1[4] = 120;
buf1[5] = 151;
buf1[6] = 181;
buf1[7] = 212;
buf1[8] = 243;
buf1[9] = 273;
buf1[10] = 304;
buf1[11] = 334;
buf2[0] = 0;
buf2[1] = 31;
buf2[2] = 60;
buf2[3] = 91;
buf2[4] = 121;
buf2[5] = 152;
buf2[6] = 182;
buf2[7] = 213;
buf2[8] = 244;
buf2[9] = 274;
buf2[10] = 305;
buf2[11] = 335;
if ((miladiYear % 4) != 0) {
date = buf1[miladiMonth - 1] + miladiDate;
if (date > 79) {
date = date - 79;
if (date <= 186) {
switch (date % 31) {
case 0:
month = date / 31;
date = 31;
break;
default:
month = (date / 31) + 1;
date = (date % 31);
break;
}
year = miladiYear - 621;
} else {
date = date - 186;
switch (date % 30) {
case 0:
month = (date / 30) + 6;
date = 30;
break;
default:
month = (date / 30) + 7;
date = (date % 30);
break;
}
year = miladiYear - 621;
}
} else {
if ((miladiYear > 1996) && (miladiYear % 4) == 1) {
ld = 11;
} else {
ld = 10;
}
date = date + ld;
switch (date % 30) {
case 0:
month = (date / 30) + 9;
date = 30;
break;
default:
month = (date / 30) + 10;
date = (date % 30);
break;
}
year = miladiYear - 622;
}
} else {
date = buf2[miladiMonth - 1] + miladiDate;
if (miladiYear >= 1996) {
ld = 79;
} else {
ld = 80;
}
if (date > ld) {
date = date - ld;
if (date <= 186) {
switch (date % 31) {
case 0:
month = (date / 31);
date = 31;
break;
default:
month = (date / 31) + 1;
date = (date % 31);
break;
}
year = miladiYear - 621;
} else {
date = date - 186;
switch (date % 30) {
case 0:
month = (date / 30) + 6;
date = 30;
break;
default:
month = (date / 30) + 7;
date = (date % 30);
break;
}
year = miladiYear - 621;
}
}
else {
date = date + 10;
switch (date % 30) {
case 0:
month = (date / 30) + 9;
date = 30;
break;
default:
month = (date / 30) + 10;
date = (date % 30);
break;
}
year = miladiYear - 622;
}
}
switch (month) {
case 1:
strMonth = "فروردین";
break;
case 2:
strMonth = "اردیبهشت";
break;
case 3:
strMonth = "خرداد";
break;
case 4:
strMonth = "تیر";
break;
case 5:
strMonth = "مرداد";
break;
case 6:
strMonth = "شهریور";
break;
case 7:
strMonth = "مهر";
break;
case 8:
strMonth = "آبان";
break;
case 9:
strMonth = "آذر";
break;
case 10:
strMonth = "دی";
break;
case 11:
strMonth = "بهمن";
break;
case 12:
strMonth = "اسفند";
break;
}
switch (WeekDay) {
case 0:
strWeekDay = "یکشنبه";
break;
case 1:
strWeekDay = "دوشنبه";
break;
case 2:
strWeekDay = "سه شنبه";
break;
case 3:
strWeekDay = "چهارشنبه";
break;
case 4:
strWeekDay = "پنج شنبه";
break;
case 5:
strWeekDay = "جمعه";
break;
case 6:
strWeekDay = "شنبه";
break;
}
}
}
public static String getCurrentShamsidate() {
Locale loc = new Locale("en_US");
Utilities util = new Utilities();
SolarCalendar sc = util.new SolarCalendar();
return String.valueOf(sc.year) + "/" + String.format(loc, "%02d",
sc.month) + "/" + String.format(loc, "%02d", sc.date);
}
حذف یک پوشه به همراه کلیه محتویاتش شامل فایل ها و پوشه ها:
boolean deleteRecursive(File fileOrDirectory) {
if (fileOrDirectory.isDirectory())
for (File child: fileOrDirectory.listFiles())
deleteRecursive(child);
return fileOrDirectory.delete();
}
این طور صدا زده می شود :
String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
String path = sdCard+"/FolderName";
File f = new File(path);
if(deleteRecursive(f))
Log.i("LOG", path + " Deleted Seccessfully.");
نیاز به دسترسی زیر در Manifest دارد:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
بررسی وضعیت دسترسی به فلاش دوربین
@SuppressWarnings("unused")
private boolean isFlashAvailable(Camera camera) {
Parameters params = camera.getParameters();
List<String> flashModes = params.getSupportedFlashModes();
if (flashModes == null) {
return false;
}
for (String flashMode: flashModes) {
if (Parameters.FLASH_MODE_ON.equals(flashMode)) {
return true;
}
}
return false;
}
نمایش پیغام بصورت toast در هر جای برنامه
public static void showMessage(Activity activity, final String msg)
{
activity.runOnUiThread(new Runnable()
{
@Override
public void run()
{
Toast.makeText(G.context, msg, Toast.LENGTH_LONG).show();
}
});
}
جستجو در یک رشته و رنگی کردن کلمات:
public static String searchReplace(String value, String search) { if (search == null || search.equals("")) return value;
value = value.replace(search, "<font color=\"red\"><b>" + search + "</b></font>"); return value; }
یک عدد رندوم بین یک بازه:
public static int rand(int min, int max) { int rand = min + (int) (Math.random() * (max - min + 1)); return rand; }
بزرگ کردن ویو با انیمیشن (Animation)
public class AnimationProgress extends Animation {
protected final int originalHeight;
protected final int originalWidth;
protected final View view;
protected float perValueHight;
protected float perValueWidth;
public AnimationProgress(View view, int fromHeight, int toHeight, int fromWidth, int toWidth) {
this.view = view;
this.originalHeight = fromHeight;
this.originalWidth = fromWidth;
this.perValueHight = (toHeight - fromHeight);
this.perValueWidth = (toWidth - fromWidth);
}
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
view.getLayoutParams().height = (int) (originalHeight + perValueHight * interpolatedTime);
view.getLayoutParams().width = (int) (originalWidth + perValueWidth * interpolatedTime);
view.requestLayout();
}
@Override
public boolean willChangeBounds() {
return true;
}
}
کد بکاپ گرفتن از SharedPreferences
private boolean saveSharedPreferencesToFile(File dst) {
boolean res = false;
ObjectOutputStream output = null;
try {
output = new ObjectOutputStream(new FileOutputStream(dst));
SharedPreferences pref =
getSharedPreferences(prefName, MODE_PRIVATE);
output.writeObject(pref.getAll());
res = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (output != null) {
output.flush();
output.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return res;
}
@SuppressWarnings({ "unchecked" })
private boolean loadSharedPreferencesFromFile(File src) {
boolean res = false;
ObjectInputStream input = null;
try {
input = new ObjectInputStream(new FileInputStream(src));
Editor prefEdit = getSharedPreferences(prefName, MODE_PRIVATE).edit();
prefEdit.clear();
Map<String, ?> entries = (Map<String, ?>) input.readObject();
for (Entry<String, ?> entry : entries.entrySet()) {
Object v = entry.getValue();
String key = entry.getKey();
if (v instanceof Boolean)
prefEdit.putBoolean(key, ((Boolean) v).booleanValue());
else if (v instanceof Float)
prefEdit.putFloat(key, ((Float) v).floatValue());
else if (v instanceof Integer)
prefEdit.putInt(key, ((Integer) v).intValue());
else if (v instanceof Long)
prefEdit.putLong(key, ((Long) v).longValue());
else if (v instanceof String)
prefEdit.putString(key, ((String) v));
}
prefEdit.commit();
res = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
try {
if (input != null) {
input.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return res;
}
تبدیل dp به px و برعکس:
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density ;
return (int) (dpValue * scale + 0.5f);
}
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density ;
return (int) (pxValue / scale + 0.5f);
}
تشخیص روت بودن گوشی
public static boolean isRooted() {
try {
Process process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(
process.getOutputStream());
os.writeBytes("exit\n");
os.flush();
process.waitFor();
int i = process.exitValue();
if (i == 0)
return true;
else
return false;
} catch (Exception e) {
}
return false;
}
پیدا کردن بزرگترین عدد بین هر چندتا عدد که دلتون بخواد !!!!!
public static int max(int... i){
int max;
int c = i[0];
max=c;
for (int k = 1; k < i.length; k++){
if(i[k]>max)
max=i[k];
}
return max;
}
int i = max(2,-5,1000,50,60,600);
int j = max(1,8,4,54,87,468,354,156,357,68,354,68,34,69);
گرفتن MD5 یک رشته
public static String getMD5(String s) throws Exception {
MessageDigest digest = java.security.MessageDigest.getInstance("MD5");
digest.update(s.getBytes());
byte messageDigest[] = digest.digest();
StringBuffer hexString = new StringBuffer();
for (int i = 0; i < messageDigest.length; i++) {
String h = Integer.toHexString(0xFF & messageDigest[i]);
while (h.length() < 2)
h = "0" + h;
hexString.append(h);
}
return hexString.toString();
}
بررسی خالی بودن یا نبودن یک EditText برای فهمیدن اینکه کاربر به سوال یا ... پاسخ داده یا نه ، چون خودم هرکاری میکردم error میداد بجز این روش که جواب داد :
private boolean isEmpty(EditText etText) {
return etText.getText().toString().trim().length() == 0;
}
این متود نام و مدل گوشی کاربر رو بصورت String برمی گردنونه :
البته متود پایینیش هم هست که تکمیلش میکنه .
public String getDeviceName() {
String manufacturer = Build.MANUFACTURER;
String model = Build.MODEL;
if (model.startsWith(manufacturer)) {
return capitalize(model);
} else {
return capitalize(manufacturer) + " " + model;
}
}
private String capitalize(String s) {
if (s == null || s.length() == 0) {
return "";
}
char first = s.charAt(0);
if (Character.isUpperCase(first)) {
return s;
} else {
return Character.toUpperCase(first) + s.substring(1);
}
}
تشخیص اجرای برنامه روی شبیه ساز یا گوشی:
public static boolean isEmulator() {
return Build.MODEL.equals("sdk") || Build.MODEL.equals("google_sdk");
}
چرخش bitmap :
public static Bitmap rotateBitmap(Bitmap source, int rotation, boolean recycle) {
if (rotation == 0) return source;
int w = source.getWidth();
int h = source.getHeight();
Matrix m = new Matrix();
m.postRotate(rotation);
Bitmap bitmap = Bitmap.createBitmap(source, 0, 0, w, h, m, true);
if (recycle) source.recycle();
return bitmap;
}
دوتا متد برای تبدیل Bitmap به Drawable و برعکس
public static Bitmap drawableToBitmap(Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
return ((BitmapDrawable) drawable).getBitmap();
}
Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
public static Drawable bitmapToDrawable(Context context, Bitmap bitmap) {
return new BitmapDrawable(context.getResources(), bitmap);
}
2 تا back برای خروج از برنامه اولی toast دومی خروج
private static final int TIME_INTERVAL =2000; // # milliseconds time between two click back
privatelong mBackPressed;
@Override
publicvoid onBackPressed()
{
if(mBackPressed + TIME_INTERVAL >System.currentTimeMillis())
{
super.onBackPressed();
return;
}
else{
Toast.makeText(getBaseContext(),"Tap back button in order to exit",Toast.LENGTH_SHORT).show();
}
mBackPressed =System.currentTimeMillis();
}
مخفی کردن View با Animation
زمانی که می خواهیم با فشردنButton یک LinearLayout با هر عنصری مخفی شود :
view.setVisibility(View.GONE);
اما بدون Animation اجرای زیبایی نداره
private Animation fadeIn , fadeOut;
private AnimationSet animation;
private void animateLinearLayout(final View view){
fadeIn = new AlphaAnimation(0, 1);
fadeIn.setInterpolator(new DecelerateInterpolator());
fadeIn.setDuration(1000);
fadeOut = new AlphaAnimation(1, 0);
fadeOut.setInterpolator(new AccelerateInterpolator());
fadeOut.setStartOffset(500);
fadeOut.setDuration(500);
if(view.getVisibility() != View.GONE){
animation = new AnimationSet(false);
// animation.addAnimation(fadeIn);
animation.addAnimation(fadeOut);
view.startAnimation(animation);
view.setVisibility(View.GONE);
Log.i(G.Logs.Screen , "view.setVisibility(View.GONE)");
}else if(view.getVisibility() == View.GONE){
view.setVisibility(View.VISIBLE);
AnimationSet animation = new AnimationSet(false);
animation.addAnimation(fadeIn);
// animation.addAnimation(fadeOut);
view.startAnimation(animation);
Log.i(G.Logs.Screen , "view.setVisibility(View.VISIBLE)");
}
new CountDownTimer(1200 , 600){
@Override
public void onTick(long l) {
if(view.getVisibility() != View.GONE) {
}
}
@Override
public void onFinish() {
view.clearAnimation();
Log.i(G.Logs.Screen , "view.clearAnimation()");
}
};
}
شما میتونید با متودی که در پایین نوشتم به اس ام اس های دریافتی دسترسی پیدا کنید .
توضیحاتی در موررد کد ها میدم :
1 - در این متود لیستی از String که محتویات هر اس ام اس ( متن،شماره و زمان) هست رو به عنوان مقدار برگشتی در نظر گرفتیم و میتونیم مثلا به جای اضافه کردن به این لیست ، به دیتابیس خودمون اضافه شون کنیم و بعد توی یه لیست ویو نمایشش بدیم.
2 -در این متود متن پیام ، شماره و زمان دریافت پیام رو با استفاده از cursor بدست آوردیم و اگه میخواید چیزای دیگه مثل اسم کسی که پیام رو فرستاده و ... رو بدست بیارید میتونید تو اینترنت بگردید و پیدا کنید .
public List<String> getSMS() {
List<String> sms = new ArrayList<String>();
Uri uriSMSURI = Uri.parse("content://sms/inbox");
Cursor cur = getContentResolver().query(uriSMSURI, null, null, null,
null);
while (cur.moveToNext()) {
String address = cur.getString(cur.getColumnIndex("address"));
String body = cur.getString(cur.getColumnIndexOrThrow("body"));
String date = cur.getString(cur.getColumnIndex("date"));
Long timestamp = Long.parseLong(date);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timestamp);
int hour = calendar.get(calendar.HOUR);
int min = calendar.get(calendar.MINUTE);
int sec = calendar.get(calendar.SECOND);
String time = hour + " : " + min + " : " + sec;
sms.add("time : " + time + " Number: " + address + " Message: "+ body);
}
return sms;
}
کد روشن کردن بلوتوث و فعال کردن قابلیت جستجو
public void onBluetooth(){
BluetoothAdapter Bluetooth = BluetoothAdapter.getDefaultAdapter();
if(Bluetooth == null)
{
Toast.makeText(this, "متاسفانه دستگاه شما از بلوتوث پشتیانی نمی کند !!!",Toast.LENGTH_LONG ).show();
}
else{
if(!Bluetooth.isEnabled()){
Bluetooth.enable();
Intent DiscIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
startActivity(DiscIntent);
}}}
کد بالا خودکار بلوتوث را روشن میکند. و برای 120 ثانیه قابلیت جستجو میدهد. ولی اگر بخواهیم که با یک دیالوگ از کاربر بخواهیم که بلوتوث را فعال کند ، باید به صورت زیر از اینتنت استفاده کنیم.
public void onBluetooth(){
BluetoothAdapter Bluetooth = BluetoothAdapter.getDefaultAdapter();
if(Bluetooth == null)
{
Toast.makeText(this, "متاسفانه دستگاه شما از بلوتوث پشتیانی نمی کند !!!",Toast.LENGTH_LONG ).show();
}
else{
if(!Bluetooth.isEnabled()){
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivity(enableBtIntent);
Intent DiscIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
startActivity(DiscIntent);
}}}
تابعی برای فرستادن ایمیل:
مهمترین تفاوت این تابع با تابعی که دوستان در چند پست قبل فرستاده بودند، این است که فقط لیستی از برنامه های ایمیل کاربر برایش باز می شود. (یعنی مثلا برنامه هایی مثل Facebook و Bluetooth و غیره نمایش داده نمی شوند)
منبع: http://stackoverflow.com/questions/8701634/send-email-intent
private boolean sendEmail(String reciever, String subject, String textMessage) {
try {
Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", reciever, null));
emailIntent.putExtra(Intent.EXTRA_SUBJECT, subject);
emailIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
startActivity(Intent.createChooser(emailIntent, "Send email..."));
return true;
}
catch (Exception e) {
e.printStackTrace();
return false;
}
}
بخوایید کسی صفحه اینستاگرامتون رو فالوو کنه :
به جای واژه yekteam نام کاربری خودتون رو توی اینستا بزارید!
TextView txtFollow = (TextView) findViewById(R.id.txtFollow);
txtFollow.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Uri uri = Uri.parse("http://instagram.com/_u/yekteam");
Intent likeIng = new Intent(Intent.ACTION_VIEW, uri);
likeIng.setPackage("com.instagram.android");
try {
startActivity(likeIng);
} catch (ActivityNotFoundException e) {
startActivity(new Intent(Intent.ACTION_VIEW,
Uri.parse("http://instagram.com/yekteam")));
}
}
});
ارسال ایمیل به همراه attach فایل:
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND_MULTIPLE); emailIntent.setType("plain/text"); emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[]{"email"}); emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "subject"); emailIntent.putExtra(android.content.Intent.EXTRA_TEXT,"Test"); //has to be an ArrayList ArrayList<Uri> uris = new ArrayList<Uri>(); //convert from paths to Android friendly Parcelable Uri's
File source = new File("آدرس یک فولدر"); for (String file : source.listfiles())
{ File fileIn = new File(file); Uri u = Uri.fromFile(fileIn); uris.add(u); } emailIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); context.startActivity(emailIntent);
اگر خواستید یک فایل رو attach کنید، کافیه بجای استفاده از foreach خودتون دستی این کار رو انجام بدین
من این کد جالب رو دیدم گفتم اینجا بزارم
با زدن کلید اینتر در EditText کاری انجام میشه
urlText.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View view, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
openBrowser();
return true;
}
return false;
}
});
}
/** Open a browser on the URL specified in the text box */
private void openBrowser() {
webView.loadUrl(urlText.getText().toString());
webView.requestFocus();
}
سلام دوستان .
با این کد میتونید قسمت تنظیمات گوشیتون رو باز کنید :
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.setClassName("com.android.settings", "com.android.settings.Settings");
startActivity(intent);
همین
سلام دوستان .
با این کد میتونید یک کد USSD رو در برنامه اجرا کنید :
String code = Uri.encode("#");
String ussd_one = "*" + "733" + code;
startActivityForResult(new Intent
("android.intent.action.CALL", Uri.parse("tel:" + ussd_one)), 1);, 1);
...
سلام دوستان عزیز.
با این کد میتونید یک عکس رو به عنوان پس زمینه گوشی انتخاب کنید :
این کد رو در قسمت onCreat قرار بدید :
WallpaperManager wallpaperManager = WallpaperManager.getInstance(this);
و حالا این کد رو در جایی بگذارید که میخواهید عکس رو بگیره و با پس زمینه گوشی ست کنه :
try {
wallpaperManager.setBitmap(img_Name.getDrawingCache());
}
catch (Exception e) {
e.printStackTrace();
}
img_Name اسم همون عکسی هست که قراره با پس زمینه گوشی ست بشه ...
اینم پرمیشن داخل منیفست :
<uses-permission android:name="android.permission.SET_WALLPAPER" />
همین
سلام دوستان .
سورس اضافه کردن شورتکات روی دستکاپ گوشی :
این متد رو بگذارید توی کلاستون :
private void ShortcutIcon() {
Intent shortcutIntent = new Intent(getApplicationContext(), ShortkatActivity.class);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
shortcutIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Intent addIntent = new Intent();
addIntent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
addIntent.putExtra(Intent.EXTRA_SHORTCUT_NAME, "Test");
addIntent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
Intent.ShortcutIconResource.fromContext(getApplicationContext(),
R.drawable.ic_launcher));
addIntent.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
getApplicationContext().sendBroadcast(addIntent);
}
هر موقع خواستید شورتکات اضافه بشه به دسکتاپ این متد رو صدا بزنید .
این پرمیشن رو هم به منیفست اضافه کنید :
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
همین
جلوگیری از خاموش شدن صفحه :
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
برای غیر فعال کردن حالت بالا (ممکن است در یک دستور شرطی بخواهیم فقط در شرایطی خاص صفحه خاموش نشود)
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
چک کردن اینکه آیا سرویس درحال اجراست ؟
//............check is service runing
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
for (RunningServiceInfo service: manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
//...................................
و برای صدا زدن :
isMyServiceRunning(MyService.class)
گرفتن یک عکس از view دلخواه :
public void screenshot(
View view
){ view.getRootView();
String state =Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)){File picDir =newFile(Environment.getExternalStorageDirectory()+"/myPic");if(!picDir.exists()){ picDir.mkdir();} view.setDrawingCacheEnabled(true); view.buildDrawingCache(true);
Bitmap bitmap = view.getDrawingCache();//
Date date = new Date();String fileName ="mylove"+".jpg";File picFile =newFile(picDir +"/"+ fileName);
try{ picFile.createNewFile();
FileOutputStream picOut =newFileOutputStream(picFile); bitmap =Bitmap.createBitmap(bitmap,0,0, bitmap.getWidth(),(int)(bitmap.getHeight()/1.2));
boolean saved = bitmap.compress(CompressFormat.JPEG,100, picOut);
if(saved){
Toast.makeText(getApplicationContext(),"Image saved to your device Pictures "+"directory!",Toast.LENGTH_SHORT).show();
}
else{//Error} picOut.close();}catch(Exception e){ e.printStackTrace();
} view.destroyDrawingCache();
}
else{//Error}}
در مانفیست اضافه کنید:
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
اموزش دریافت ip
زمانی که دو گوشی به وسیله وای فای متصل شدند ان گوشی که مشتری است کد زیر برایش کار می کند
publicString getWifiApIpAddress(){WifiManager wifiManager =(WifiManager) getSystemService(WIFI_SERVICE);
int ipAddress = wifiManager.getConnectionInfo().getIpAddress();
returnString.format("%d.%d.%d.%d",(ipAddress &0xff),(ipAddress >>8&0xff),(ipAddress >>16&0xff),(ipAddress >>24&0xff));}
با سلام ؛ ساخت یک toast سفارشی با xml دلخواه.مثلا ایکن و متن و قیافه ای که خودتون دوس دارین:
public static void toastShow(String message){
LayoutInflater inflater = G.CurrentActivity.getLayoutInflater();
View view = inflater.inflate(R.layout.layout_toast,
(ViewGroup) G.CurrentActivity.findViewById(R.id.linearTost));
TextView txtTileToast = (TextView) view.findViewById(R.id.txtTtitleaost);
txtTileToast.setText(message);
Toast toast = new Toast(G.CurrentActivity);
toast.setView(view);
toast.setGravity(Gravity.BOTTOM |
Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_SHORT);
toast.show();}
و اینم فایل xml که میتونید به دلخواه تغییرش بدین:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:gravity="center" android:padding="8dip">
Hex Color To RGB
int color = (int) Long.parseLong("ff0000", 16);
int r = (color >> 16) & 0xFF;
int g = (color >> 8) & 0xFF;
int b = (color >> 0) & 0xFF;
RGB Color To Hex
String hexColor = String.format("#%02x%02x%02x", red, green, blue);
ارسال ایمیل توسط کاربر
Intent i = new Intent(Intent.ACTION_SEND); i.setType("message/rfc822"); i.putExtra(Intent.EXTRA_EMAIL , new String[]{"recipient@example.com"}); i.putExtra(Intent.EXTRA_SUBJECT, "subject of email"); i.putExtra(Intent.EXTRA_TEXT , "body of email"); try { startActivity(Intent.createChooser(i, "Send mail...")); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(MyActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show(); }
تبدیل رقم های انگلیسی به رقم فارسی در فونت فارسی
int persian_zero_unicode= 1632; static char[] PersianChars = {'٠','١','٢','۳','۴','۵','۶','٧','٨','٩'}; public static String En2Per (String str) { StringBuilder builder = new StringBuilder(); for(int i =0;i<str.length();i++) { if(Character.isDigit(str.charAt(i))) { builder.append(PersianChars[(int)(str.charAt(i))-48]); } else { builder.append(str.charAt(i)); } } return builder.toString(); }
خط انداختن بین هر چهار شماره کارت بانکی در حین تایپ :
private void onEditTextInput() {
edtCard.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode != KeyEvent.KEYCODE_DEL) {
int start = Math.max(edtCard.getSelectionStart(), 0);
int end = Math.max(edtCard.getSelectionEnd(), 0);
switch (edtCard.length()) {
case 4:
edtCard.getText().replace(Math.min(start, end), Math.max(start, end), "-", 0, 1);
break;
case 9:
edtCard.getText().replace(Math.min(start, end), Math.max(start, end), "-", 0, 1);
break;
case 14:
edtCard.getText().replace(Math.min(start, end), Math.max(start, end), "-", 0, 1);
break;
}
return true;
}
return false;
}
});
}
اگر کاربر شماره کارت 16 رقمی رو کپی / پیست کنه :
String str = edtCard.getText().toString();
str = new StringBuilder(str).insert(str.length() - 4, "-").toString();
str = new StringBuilder(str).insert(str.length() - 9, "-").toString();
str = new StringBuilder(str).insert(str.length() - 14, "-").toString();
edtCard.setText(str);
اسکن کردن Sdcard و پیدا کردن فایل های مورد نظر
private String sdCard = Environment.getExternalStorageDirectory().getAbsolutePath();
public ArrayList<String> paths = new ArrayList<String>();
. . . onCreate() {
listOfMedia(new File(sdCard));
}
private void listOfMedia(File pFile) {
File[] list = pFile.listFiles();
for (File file : list) {
if (file.isDirectory()) {
Log.d("LOG", file + " IS DIR");
listOfMedia(file);
} else {
String path = file.getAbsolutePath();
if (path.contains(".mp4") || path.contains(".jpg")|| path.contains(".jpeg") || path.contains(".png")) {
paths.add(path);
Log.e("LOG", file + " ADD");
}
Log.i("LOG", file + " IS FILE");
}
}
Log.w("LOG", paths.size() + " DONE");
}
private void listOfMedia(File pFile) {
File[] list = pFile.listFiles();
for (File file : list) {
if (file.isDirectory()) {
if (!new File(file, ".nomedia").exists() && !file.getName().substring(0,1).contains(".")) {
Log.d("LOG", file + " IS DIR");
listOfMedia(file);
}
} else {
String path = file.getAbsolutePath();
if (path.contains(".mp4") || path.contains(".jpg") || path.contains(".jpeg") || path.contains(".png")) {
paths.add(path);
Log.e("LOG", file + " ADD");
}
Log.i("LOG", file + " IS FILE");
}
}
Log.w("LOG", paths.size() + " DONE");
}
کد رو میزاری رنگش میپره ، رنگش رو درست میکنی فرمتش میپره !
برای بررسی اتصال به اینرنت و اطلاعات اضافی می تونید از کلاس های NetworkInfo و ConnectivityManager استفاده کنید که اطلاعات جالبی رو در اختیارتون قرار می دن.
مثال :
public boolean isOnline() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo netInfo = cm.getActiveNetworkInfo(); return netInfo != null && netInfo.isConnectedOrConnecting(); }
برای استفاده از کد بالا حتماً مجوز زیر رو به برنامه اضافه کنید :
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .