اندروید اسلامی

برنامه های اندروید در قالب و محتوای دینی و اسلامی

در این وبلاگ برنامه هایی که برای اندروید می سازم را تقدیم دوستان میکنم. سعی ام بر این است که بیشتر این برنامه ها محتوای دینی و اسلامی و ترویج شریعت باشد.

در ضمن پروژه های اندروید را نیز می توانید در همین وبلاگ از قسمت منوی وبلاگ سفارش دهید.

قالَ عَلِىٌّ(علیه السلام): خَیْرُ النَّاسِ مَنْ نَفَعَ النَّاسَ.
امام علی علیه السلام می فرمایند: بهترین مردم کسى است که به مردم سود رساند.

امام صادق علیه السّلام فرمودند:
قالَ کُلُّ ذی صَناعَةٍ مُضْطَرٌّ اِلی ... .
هر صاحب حرفه و صنعتی ناچار باید دارای سه خصلت باشد تا بتواند به وسیله آن تحصیل درآمد کند. اوّل آن که در رشته علمی خویش مهارت داشته باشد، دیگر آن که با درستکاری و امانت رفتار کند، سوم آن که با کارفرمایان حسن برخورد داشته باشد و نسبت به آنان ابراز تمایل نماید.
بحار الانوار، ج 17، ص 182

کارتان را برای خدا نکنید؛ برای خدا کار کنید!
تفاوتش فقط همین اندازه است که ممکن است حسین (علیه السلام) در کربلا باشد و من در حال کسب علم برای رضایت خدا ...!
شهید سید مرتضی آوینی

فرض کنید اپلیکیشنی که من توسعه داده ام وقتی در اختیار دیگران قرار میگیرد کرش میکند و بسته میشود. میخواهم که هر موقع اپ کرش کرد گزارش خطا را کاربر بتواند برای من ارسال کند تا من بتوانم مشکل را حل کنم. 

چه باید کرد؟

برای گزارش خطا در اپلیکیشن خود می‌توانید از کتابخانه‌هایی مانند Crashlytics و Fabric استفاده کنید. این کتابخانه‌ها قابلیت جمع‌آوری و ارسال گزارش خطاهای اپلیکیشن را به صورت خودکار دارند و برای کاربران نیز امکان ارسال گزارش خطا وجود دارد.

برای استفاده از کتابخانه Crashlytics می‌توانید به صورت زیر عمل کنید:

ابتدا به فایل build.gradle(Module: app) خود بروید و در قسمت dependencies کد زیر را اضافه کنید:

 

implementation 'com.google.firebase:firebase-crashlytics:17.4.1'

 

سپس به فایل AndroidManifest.xml خود بروید و دسترسی اینترنت را به اپلیکیشن خود اضافه کنید:

 

<uses-permission android:name="android.permission.INTERNET" />


در اولین Activity اپلیکیشن خود (معمولا MainActivity)، در قسمت onCreate() کد زیر را اضافه کنید:
 

FirebaseCrashlytics.getInstance().setCrashlyticsCollectionEnabled(true);


حالا در هرجای اپلیکیشن که مایلید اطلاعات خطا را ارسال کنید، کد زیر را استفاده کنید:
 

FirebaseCrashlytics.getInstance().log("Error message: " + error.getMessage());
FirebaseCrashlytics.getInstance().recordException(error);


در پایان، برای تست درستی عملکرد کتابخانه Crashlytics می‌توانید یک Exception ساده ایجاد کنید:
 

throw new RuntimeException("This is a crash");


در نهایت، پس از رخ دادن هر گونه خطا، اطلاعات خطا توسط کتابخانه Crashlytics جمع‌آوری و به صورت خودکار ارسال خواهد شد. شما هم می‌توانید از پنل مدیریت Crashlytics در Firebase برای مشاهده و مدیریت گزارش‌های خطا استفاده کنید.


حالا فرض کنید اپ من اتصال به اینترنت ندارد و نمیخواهم از این کتابخانه ها استفاده کنم!


در این صورت، بهترین راه برای بررسی خطا، استفاده از روش‌های زیر است:

  • استفاده از Log: شما می‌توانید از کلاس Log اندروید برای نمایش اطلاعات مربوط به خطاها استفاده کنید. شما می‌توانید این اطلاعات را در کنسول اندروید یا در فایل Logcat در Android Studio مشاهده کنید.
  • استفاده از Crashlytics: این ابزار توسط شرکت Firebase ارائه می‌شود و به شما اجازه می‌دهد تا خطاهایی که در برنامه شما رخ می‌دهد را بررسی کنید. با استفاده از این ابزار، شما می‌توانید گزارش خطاها را در پنل Firebase خودتان مشاهده کنید.
  • استفاده از ACRA: این کتابخانه نسخه اندرویدی Crashlytics محسوب می‌شود و به شما اجازه می‌دهد تا خطاهای برنامه خود را در فضای ابری ذخیره کنید. با استفاده از این کتابخانه، شما می‌توانید به راحتی خطاها را بررسی کنید و بهبود برنامه خود را پیش بگیرید.

در هر صورت، استفاده از یکی از این روش‌ها به من کمک خواهد کرد تا مشکلات برنامه ام را شناسایی کنم و برنامه‌ی خودم را ترمیم کنم.


باید توجه داشته باشید که در بسیاری از موارد برای ارسال گزارش خطا، به دلیل نیاز به اتصال به اینترنت، نیاز به استفاده از کتابخانه های شبکه وجود دارد. با این حال، شما می‌توانید برای مدیریت خطاها و گزارش دادن به کاربران در حالت آفلاین، از یک دیتابیس محلی استفاده کنید و خطاها را در آن ذخیره کنید. سپس هر زمان که کاربر به اینترنت متصل شد، خطاها را به صورت آنلاین برای شما ارسال کند. البته این روش هم نیاز به برنامه نویسی و نیاز به مدیریت دقیق بین خطاهای ذخیره شده در دیتابیس و خطاهای ارسال شده آنلاین دارد.


اگر بخواهید متن گزارش خطا به همراه مشخصات نرم افزاری و سخت افزاری دستگاه اندرویدی را در جایی روی گوشی ذخیره کنید و بعد موقع اجرای بعدی این متن را کاربر بتواند با اپ های مدیریت ایمیل گوشی خودش برای شما بفرستد، پس لزوما نیازی نیست اپ شما دسترسی به اینترنت داشته باشد. در این صورت، می توانید از یک فایل محلی برای ذخیره گزارش خطا استفاده کنید. هنگامی که اپ شما کرش می کند، می توانید متن گزارش خطا را به همراه اطلاعات دیگری مانند نام پکیج، ورژن نرم‌افزار، ورژن سیستم عامل و غیره به یک فایل محلی ذخیره کنید. سپس با استفاده از اپ های مدیریت فایل، کاربر می تواند این فایل را پیدا کند و ارسال کند. در ادامه یک نمونه کد برای ذخیره گزارش خطا در یک فایل محلی ارائه شده است:

 

public class MyApplication extends Application implements Thread.UncaughtExceptionHandler {
 
    private static final String FILE_NAME = "crash_log.txt";
 
    @Override
    public void onCreate() {
        super.onCreate();
        Thread.setDefaultUncaughtExceptionHandler(this);
    }
 
    @Override
    public void uncaughtException(Thread thread, Throwable throwable) {
        try {
            FileOutputStream fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
            PrintWriter pw = new PrintWriter(fos);
            pw.println("Time: " + new Date());
            pw.println("Package name: " + getPackageName());
            pw.println("Version: " + BuildConfig.VERSION_NAME);
            pw.println("Device: " + Build.MANUFACTURER + " " + Build.MODEL);
            pw.println("Android version: " + Build.VERSION.RELEASE);
            pw.println();
            throwable.printStackTrace(pw);
            pw.close();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.exit(0);
    }
}


در این کد، ابتدا یک کلاس MyApplication تعریف شده است که از کلاس Application ارث‌بری شده است. سپس در متد onCreate، Thread.setDefaultUncaughtExceptionHandler(this) فراخوانی شده است تا زمانی که یک اکسپشن اتفاق بیفتد، متد uncaughtException فراخوانی شود. در متد uncaughtException، متن گزارش خطا به همراه اطلاعات مفید دیگری در یک فایل با نام FILE_NAME ذخیره می‌شود. در انتها با فراخوانی System.exit(0)، اپ خاتمه می‌یابد. در این روش نیازی به اتصال به اینترنت نیست و گزارش خطاها به صورت محلی در دسترس هستند.

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی