توابع و کلاسهای کوچیک و مفید ( مشارکت کنید )
با سلام
در این تایپیک قصد دارم یکسری توابع و کلاسهای مفید رو که خودم در برنامه ها استفاده میکنم ، اینجا بزارم
تا مورد استفاده دوستان قرار بگیره
البته این رو هم بگم که بنده توابع رو بسته به نیاز خودم طراحی میکنم .
خیلی از این توابع رو میشه با یه خورده وقت گذاشتن بیشتر بهتر پیاده سازی کرد .
بیشتر این توابع رو من خیلی وقت پیش نوشتم و هر موقع نیاز بشه فقط ازشون استفاده میکنم بازبینی دوباره نشده تا بهینه بشه
این توابع فقط برای ایده گرفتن میتونه مورد استفاده بشه و بسته به نیاز خودتون تغییرش بدین
برای هر تابع فقط در زیر همون پست نظر بدین از ارسال پست های جدید خودداری کنید
در صورتیکه برای یه تابع روش بهتری دارید یه تابع نوشته در سایت در یک تایپیک جداگانه منتشر کنید و لینکش رو در زیر پست همون تابع قرار بدید.
برای تشکر و تشویق به قرار دادن توابع بیشتر هم فقط کافیه لایک کنید و از اسپم جدا خودداری کنید
لیست توابع :
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" />
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .