توابع و کلاسهای کوچیک و مفید ( مشارکت کنید )
با سلام
در این تایپیک قصد دارم یکسری توابع و کلاسهای مفید رو که خودم در برنامه ها استفاده میکنم ، اینجا بزارم
تا مورد استفاده دوستان قرار بگیره
البته این رو هم بگم که بنده توابع رو بسته به نیاز خودم طراحی میکنم .
خیلی از این توابع رو میشه با یه خورده وقت گذاشتن بیشتر بهتر پیاده سازی کرد .
بیشتر این توابع رو من خیلی وقت پیش نوشتم و هر موقع نیاز بشه فقط ازشون استفاده میکنم بازبینی دوباره نشده تا بهینه بشه
این توابع فقط برای ایده گرفتن میتونه مورد استفاده بشه و بسته به نیاز خودتون تغییرش بدین
برای هر تابع فقط در زیر همون پست نظر بدین از ارسال پست های جدید خودداری کنید
در صورتیکه برای یه تابع روش بهتری دارید یه تابع نوشته در سایت در یک تایپیک جداگانه منتشر کنید و لینکش رو در زیر پست همون تابع قرار بدید.
برای تشکر و تشویق به قرار دادن توابع بیشتر هم فقط کافیه لایک کنید و از اسپم جدا خودداری کنید
لیست توابع :
1. یه تابع کوچیک برای گرفتن تصاویر از پوشه asset
2. دو تابع برای تبدیل عکس ذخیره شده در دیتابیس بصورت bite[] به bitmap و drawable
3. بررسی وضعیت دسترسی به اینترنت
4. خواندن یک فایل متنی از پوشه assets
5. خواندن یک فایل متنی از پوشه raw
6. اشتراک فایل apk برنامه در داخل برنامه
7. تابع خروج از برنامه
8. کلاس اسکرول افقی که حالت پیش فرض اون سمت راست باشه.
9. ارسال بازخورد به فیس بوک
10. ارسال بازخورد به اینستگرام
11. خروج از برنامه با دوبار زدن دکمه بازگشت
12. کلاس تبدیل تقویم شمسی و میلادی با امکانات اسامی روز های هفته و ماه
13. حذف یک پوشه به همراه کلیه محتویاتش شامل فایل ها و پوشه ها
14. بررسی وضعیت دسترسی به فلاش دوربین
15. نمایش پیغام بصورت toast در هر جای برنامه
بررسی وضعیت دسترسی به فلاش دوربین
@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;
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .