برترین های انجمن

  1. Farzad Sarseifi

    Farzad Sarseifi

    مدیریت انجمن


    • امتیاز: پسندیدن (Likes)

      265

    • تعداد ارسال ها

      2,162


  2. a.khosroabadi

    a.khosroabadi

    مدیر انجمن


    • امتیاز: پسندیدن (Likes)

      79

    • تعداد ارسال ها

      208


  3. Omid Zakeri

    Omid Zakeri

    مدیر انجمن


    • امتیاز: پسندیدن (Likes)

      77

    • تعداد ارسال ها

      114


  4. جواد زبیدی زاده

    جواد زبیدی زاده

    مدیر انجمن


    • امتیاز: پسندیدن (Likes)

      43

    • تعداد ارسال ها

      124



Popular Content

Showing most liked content since ۱۷/۰۱/۱۶ in all areas

  1. 5 likes
    دانلود Build Tools 26.0.2 برای اندروید استودیو 3 یکی از ابزهای مورد نیاز برنامه نویسان اندروید در ورژن 3 اندروید استودیو داشتن build tools 26.0.2 میباشد که در اندروید استودیو 3 موجود نمیباشد و باید بطور جداگانه دانلود شده و در فولدر build tools اندروید استودیو قرار داده شود دریافت از انجمن اندروید ایران 26.0.2.zip
  2. 5 likes
    با سلام در این تاپیک با نحویه کد و دیکد کردن اطلاعات بین اندروید وسرور آشنا میشوید و میتوانید اطلاعات رو به صورت امن بین کلاینت و سرور رد و بدل کنید. اول این کلاس php را به سرور اضافه کنید <?php class MCrypt { private $iv = 'fedcba9876543210'; #Same as in JAVA private $key = '0123456789abcdef'; #Same as in JAVA function __construct() { } function encrypt($str) { //$key = $this->hex2bin($key); $iv = $this->iv; $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv); mcrypt_generic_init($td, $this->key, $iv); $encrypted = mcrypt_generic($td, $str); mcrypt_generic_deinit($td); mcrypt_module_close($td); return bin2hex($encrypted); } function decrypt($code) { //$key = $this->hex2bin($key); $code = $this->hex2bin($code); $iv = $this->iv; $td = mcrypt_module_open('rijndael-128', '', 'cbc', $iv); mcrypt_generic_init($td, $this->key, $iv); $decrypted = mdecrypt_generic($td, $code); mcrypt_generic_deinit($td); mcrypt_module_close($td); return utf8_encode(trim($decrypted)); } protected function hex2bin($hexdata) { $bindata = ''; for ($i = 0; $i < strlen($hexdata); $i += 2) { $bindata .= chr(hexdec(substr($hexdata, $i, 2))); } return $bindata; } } و بعد از اون این کلاس جاوا رو به پروژه خودتون اضافه کنید import java.security.NoSuchAlgorithmException; import javax.crypto.Cipher; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class MCrypt { private String iv = "fedcba9876543210";//Dummy iv (CHANGE IT!) private IvParameterSpec ivspec; private SecretKeySpec keyspec; private Cipher cipher; private String SecretKey = "0123456789abcdef";//Dummy secretKey (CHANGE IT!) public MCrypt() { ivspec = new IvParameterSpec(iv.getBytes()); keyspec = new SecretKeySpec(SecretKey.getBytes(), "AES"); try { cipher = Cipher.getInstance("AES/CBC/NoPadding"); } catch (NoSuchAlgorithmException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchPaddingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public byte[] encrypt(String text) throws Exception { if(text == null || text.length() == 0) throw new Exception("Empty string"); byte[] encrypted = null; try { cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec); encrypted = cipher.doFinal(padString(text).getBytes()); } catch (Exception e) { throw new Exception("[encrypt] " + e.getMessage()); } return encrypted; } public byte[] decrypt(String code) throws Exception { if(code == null || code.length() == 0) throw new Exception("Empty string"); byte[] decrypted = null; try { cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec); decrypted = cipher.doFinal(hexToBytes(code)); } catch (Exception e) { throw new Exception("[decrypt] " + e.getMessage()); } return decrypted; } public static String bytesToHex(byte[] data) { if (data==null) { return null; } int len = data.length; String str = ""; for (int i=0; i<len; i++) { if ((data[i]&0xFF)<16) str = str + "0" + java.lang.Integer.toHexString(data[i]&0xFF); else str = str + java.lang.Integer.toHexString(data[i]&0xFF); } return str; } public static byte[] hexToBytes(String str) { if (str==null) { return null; } else if (str.length() < 2) { return null; } else { int len = str.length() / 2; byte[] buffer = new byte[len]; for (int i=0; i<len; i++) { buffer[i] = (byte) Integer.parseInt(str.substring(i*2,i*2+2),16); } return buffer; } } private static String padString(String source) { char paddingChar = ' '; int size = 16; int x = source.length() % size; int padLength = size - x; for (int i = 0; i < padLength; i++) { source += paddingChar; } return source; } } حا الا که کلاس های بالا رو به پروژه و سرور اضافه کردید نوبت میرسه به رد بدل کردن اطلاعات میشه برای وارد کردن کلاس php به فایل های php از include استفاده کنید به این صورت توجه کنید که لاس در کنار فایل ها باید باشه و گر نه باید مسیر کامل رو هم بدید include('myclass.php'); توی دو کلاس دو متغییر وجود دارند که باید در هر دو کلاس متغییر (دو متغییر در جاوا و دوتا در سمت سرور ) شبیه به هم باشند و گر نه شناسای مقادیر کد شده مشکل و عملا دیکد نمیشوند این متغییر ها قدرت کد شدن داده رو افزایش می دهند متغییر ها در جاوا private String iv = "fedcba9876543210";//Dummy iv (CHANGE IT!) private String SecretKey = "0123456789abcdef";//Dummy secretKey (CHANGE IT!) متغییر ها در سمت php private $iv = 'fedcba9876543210'; #Same as in JAVA private $key = '0123456789abcdef'; #Same as in JAVA خب کد و دیکد کردن مقدار در جاوا رو به این صورت تعریف میکنیم اول میای یک شیئ از کلاس ایجاد میکنیم mcrypt = new MCrypt(); اول کد اطلاعات رو کد میکنیم بعد مقادیر رو به صورت bytesToHex در یک متغییر قرار میدیم و بعد به وسیله encrypt مقدار رو کد میکنیم (این مقدار کد شده هستش) String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("Text to Encrypt") ); برای دیکد کردن کافیه متغیر رو به درون تابع decrypt قرار بدیم String decrypted = new String( mcrypt.decrypt( encrypted ) ); کا ما در سمت اندروید تموم شد و مقدار کد و دیکد کردیم کد های تکمیلی جاوا mcrypt = new MCrypt(); /* Encrypt */ String encrypted = MCrypt.bytesToHex( mcrypt.encrypt("Text to Encrypt") ); /* Decrypt */ String decrypted = new String( mcrypt.decrypt( encrypted ) ); خب حالا سمت php باز میایم یک شیئ ایجاد میکنیم $mcrypt = new MCrypt(); ابتدا میایم مقدار رو کد میکنیم $encrypted = $mcrypt->encrypt("Text to encrypt"); سپس همون مقدار رو نیز دیکد میکنیم $decrypted = $mcrypt->decrypt($encrypted); کد های تکمیلی php $mcrypt = new MCrypt(); #Encrypt $encrypted = $mcrypt->encrypt("Text to encrypt"); #Decrypt $decrypted = $mcrypt->decrypt($encrypted); امید وارم آموزش مفیدی برای شما باشه من الله التوفیق
  3. 4 likes
    سلام دوست عزیز 1. بله میتونه از طریق همون فایل php باشه. و یا زبان های دیگه. 2. توکن یک شناسه منحصر به فرد هستش که بین گوشی و سرور قرار داده میشه برای تشخیص صحت درخواست ارسالی از سمت سرور. 3. تو کدهاتون (به زبان جاوا) سعی کنید یوزر و پسورد رو به صورت String قرار ندین. بهتره از Char[ ] استفاده کنید. 4. و اینکه توکن میتونید encrypt کنید و تو گوشی نگهدارین و البته برای ارتباط با سرور هم اطلاعات رو به صورت encrypt شده بفرستین. 5. برای دیکامپایل نشدن کدها یا سختتر شدن دیکامپایل فایل خروجیتون بهتره زمانی که apk میسازید حتما proguard رو فعال کنید
  4. 4 likes
    آره والا دست این گوگل درد نکنه که همه جوره راحتمون کرده
  5. 3 likes

    نگارش 1.0.0

    51 دانلود

    یکی از عواملی که باعث جلب توجه کاربران به برنامه ای می شود استفاده از انیمیشن های جذاب و چشمگیر است. استفاده از انیمیشن در اندروید به برنامه ها شکل و شمایل حرفه ای می دهد و یکی از فاکتورهای اصلی و مهم در طراحی برنامه هایی با رابط کاربری قوی و یا باصطلاح کاربر پسند (User friendly) استفاده از انیمشین در برنامه های اندرویدی است.کتابخانه Curved-Fab-Reveal یکی از کتابخانه های جذاب به صورت انیمیشن و متریال بسیار زیبا.

    رایگان

  6. 3 likes

    نگارش 1.0.0

    16 دانلود

    کتابخانه (ShowcaseView ) برای برجسته سازی و نمایش بخش های خاص برنامه ها به کاربر با پوشش متمایز و جذاب طراحی شده است. این کتابخانه عالی است برای اشاره به نقاط مورد علاقه برای کاربران، حرکات، و یا موارد مبهم مفید است.

    رایگان

  7. 3 likes
    برای این حالت باید به TabLayout خودتون حالت scroll را ست کنید <android.support.design.widget.TabLayout android:id="@+id/sliding_tabs" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" app:tabMode="scrollable" />
  8. 3 likes

    نگارش 1.0.0

    884 دانلود

    سورس اندروید استودیو فروشگاه اینترنتی + وب سایت + وبسرویس زبان ها جاوا + php

    رایگان

  9. 3 likes
    در این تاپیک آموزشی، از ابتدا آموزش برنامه نویسی اندروید را شروع خواهیم نمود ،یکی از مشکلات برنامه نویسان اندروید کم یا نبود آموزش های اصولی اندروید میباشد ،بر همین اساس تصمیم بر آن داشتیم بطور جامع آموزش های فارسی را منتشر نماییم . بیشتر کاربران انجمن برنامه نویسی اندروید، کم و بیش با این مشکل رو به رو بوده اند که به چه صورتی اندروید را شروع کنند و شروع به آموزش اندروید بگیرند.بر این اساس در این تاپیک بطور جامع آموزش های اندروید قرار داده خواهد شد.. این تاپیک آموزشی هر چند روز یکبار بروز رسانی خواهد شد و آموزش ها جدیدتر قرار داده خواهد شد منو در اندروید ذخیره سازی اطلاعات در اندروید فرگمنت و گوگل مپ در اندروید وب سرویس در اندروید آموزش های متریال دیزاین در اندروید آموزش های کاتلین : با تشکر انجمن برنامه نویسی اندروید-پی سی دروید
  10. 2 likes
    برای اینکار کتابخانه admob رو حذف کنید از برنامه تون بعلاوه کدهایی admobe که بدین صورت میباشند mInterstitialAd = new InterstitialAd(getApplicationContext()); // set the ad unit ID mInterstitialAd.setAdUnitId(getString(R.string.interstitial_full_screen_compass)); AdRequest adRequest = new AdRequest.Builder() .build(); // Load ads into Interstitial Ads mInterstitialAd.loadAd(adRequest); mInterstitialAd.setAdListener(new AdListener() { public void onAdLoaded() { showInterstitial(); } }); سپس به سایت عدد برید و اپلیکیشن خودتون رو ثبت کنید و از طریق آموزش های سایت عدد میتوانید تبلیغ را پیاده سازی کنید
  11. 2 likes
    سلام، این لینک آموزشه: https://github.com/SIMMORSAL/ViewDrag فقط این به انگلیسیه. کسی میتونه ترجمش کنه به فارسی که همه استفاده ببرن؟
  12. 2 likes
    سلام دوست عزیز برید داخل فایل gradle.properties و اینجا پروکسی هم برای http و هم برای https ست کنید به این صورت systemProp.http.proxyHost=localhost systemProp.http.proxyPort=51520 systemProp.https.proxyHost=localhost systemProp.https.proxyPort=51520 برای دانلود کتابخونه ها باید به https وصل بشید نه http پس پراکسی باید برای Https ست بشه تا تاثیر داشته باشه هاست و پورت وی پی ان خودتونو بزارین
  13. 2 likes
    با سلام زرین پال اومده کتاب خانه ای ایجاد کرده که میشه به راحتی بدون نوشتن کد های سمت سرور درون برنامه یک درون پرداختی ایجاد کرد که میشه خود برنامه نویس امنیتش رو تامیین کنه خب من هم اومدم آموزش ویدئوی این کتاب خانه رو ظبط کرد که برای شما قرار میدم آقای سرسیفی من برای اینکه به زرین پال بفرستم توی پیکو فایل آپلود کردم اگر میشه خودتون توی سایت ارسال کنید و اتچ کنید سپاس دانلود از سرور انجمن اندروید ایران zarinpalpayment.mp4 لینک کمکی : لینک دانلود
  14. 2 likes
    String encodedHash = Uri.encode("#"); String ussd = "*" + encodedHash + lCallNum + encodedHash; startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + ussd)));
  15. 2 likes
    به تازگی گوگل در کنفرانس سال ۲۰۱۷ از ORM خود به نام Google Room رونمایی کرد که هدف این پست هم آموزش کار با این کتابخونه هست. فواید استفاده از Room بهبود امنیت دسترسی آسان پیاده سازی سریع تمام عملیات های اصلی DML به غیر از Select با استفاده از Annotation ها قابل استفاده می باشد البته دستور Select و دیگر کوئری های پیچیده را هم میتونید به راحتی پیاده سازی کنید. در ویدیو قسمت اول کار با سه کامپوننت اصلی Room یعنی DAO, Entityو Database و به همراه عملیات های مختلف یاد میگیریم. لینک دانلود مستقیم
  16. 2 likes
    سلام شما یبار به url مورد نظر Request رو بفرست و response رو نگه دار داخل یه متغیر String بعد یه JsonArray بساز از اون متغیره. یه چیزی شبیه کد زیر: JSONArray jsonarray = new JSONArray(responseString); بعدش یه آرایه ی public بساز public String[] TestResult2; بعد طولش رو برابر اون آرایه ی قبلی بزار TestResult2 = new String[jsonarray.length()]; حالا با توجه به تعداد تو درتویی های خروجی json با استفاده از یه loop بشکاف و برو جلو تا به آخرین response ها برسی و هی object بساز تا برسی به تهش بعد میتونی مقادیر رو بخونی for (int i = 0; i < jsonarray.length(); i++) { JSONObject allObj; allObj = jsonarray.getJSONObject(i); TestResult2[i] = allObj.getString("playedGames"); } البته این کدی که نوشتم مال تهشه ولی ممکنه تو از چندتا حلقه استفاده کنی
  17. 2 likes
    دوازدهمین دوره آموزشی برنامه نویسی اندروید(پیشرفته) دوره برنامه نویسی اندروید یکی از جذاب ترین دوره های آموزشی میباشد که مخاطبان دوره میتوانند در این دوره اصول طراحی اپلیکیشن های تحت اندروید را طراحی و پیاده سازی نموده و شروع به کسب درآمد در حوزه اپلیکیشن های موبایل نمایند.کاربران این دوره میتوانند با کسب مهارت های مطرح شده در سرفصلهای دوره گام بزرگ و سریعی جهت ورود به بازار اپلیکیشن های اندرویدی برداشته و با انتشار برنامه های طراحی شده خود در فضای مجاری کسب درآمد کنند.هم اینک ده ها هزار نرم افزار تحت موبایل در فضای اینترنتی منتشر شده که تعداد بی شماری از این نرم افزارها با دانلود های حیرت آور منبع درآمدهای چندین میلیونی برای طراح خود بوده اند.اگر قصد ورود به بازار نرم افزارهای موبایل دارید هم اینک در دروه آموزشی برنامه نویسی اندروید شرکت کنید. اهداف کلی این دوره: پیاده سازی ORM دیتابیس سرویس های Background در اندروید آشنایی با کتابخانه های مفید و پرکاربرد اندروید آشنایی با Fragment پیاده سازی وب سرویس پیاده سازی Api های گوگل پیاده سازی FireBase در اندروید پیاده سازی Push Notification در اندروید تست اپلیکیشن Junit و Espresso مهندسی معکول و خروجی نهایی اپلیکیشن ثبت نام دوره اندروید مشخصات دوره : مدرس (مدرسان) : فرزاد سرسیفی پیشنیاز: آشنایی با مفاهیم برنامه نویسی - آشنایی با زبان جاوا مدت زمان دوره: 10 جلسه ( کارگاه کاملا عملی تحت پروژه) به صورت کارگاهی (در مجموع 40 ساعت)(10 نفر) تاریخ برگزاری: (دوره از 12 آبان ماه 1396 به مدت 10 جلسه - روزهای جمعه 14 الی 18) مدرک: در پایان دوره مدرک پایان دوره از طرف انستیتو آموزشگاه اندروید ایران ارائه میگردد. سه دانشجو نمونه اول به شرکت های معروف ایرانی جهت همکاری معرفی می گردند. به دانشجویانی که در دوره های قبلی آموزشگاه اندروید ایران حضور داشتند 20 درصد تخفیف داده خواهد شد به شرکت کنندگان در دوره کد ویژه خرید محصولات شاپ دروید داده می شود و می توانند برای همیشه محصولات این فروشگاه را با تخفیف 50 درصدی تهیه کنند. ویژگی : آموزش در لابراتوار مجهز به سیستم های روز به صورت شبکه تحت NetSupport و متصل به اینترنت و کاملا اینتراکتیو تحت پروژه عملی انجام خواهد گرفت. مکان برگزاری : این دوره آموزشی با همکاری آموزشگاه ویستا برگزار خواهد شد راهنمای ثبت نام: جهت کسب هر نوع اطلاعاتی در خصوص دوره میتوانید با ایمیل info@android-learn.ir وشماره های تماس ۸۸۵۰۸۰۸۰ -۸۸۵۵۴۲۱۷ -۸۸۵۵۴۲۱۳ تلگرام همراه 09100046764 تماس حاصل نمایید. ثبت نام دوره اندروید سرفصلهای دوره آموزشی برنامه نویسی اندروید پیشرفته به صورت کاملا عملی: پردازش های پس زمینه ای سرویس های پس زمینه Service BroadCastReciver AlramManager ذخیره سازی اطلاعات با دیتابیس SQLite ORM و realm آشنایی با ORM های استفاده از Sugar ORM آموزش و پیاده سازی دیتابیس Realm در اندروید Notification در اندروید پیاده سازی Notification در اندروید Notification های سفارشی طراحی واسط کاربری برای Notification آشنایی با Pending Intent پیاده سازی Push Notification با استفاد از OneSignal Firebase Firebase امکانات Firebase در اندروید پیاده سازی Register و Login در Firebase پیاده سازی Push Notification Crash Reporting وب سرویس ها در اندروید آشنایی با وب سرویس JSON آشنایی با JSON Array آشنایی با JSON Object آشنایی با Retrofit دریافت اطلاعات وب سرویس Retrofit ارسال اطلاعات به سرور Retrofit Image Loader Gson,Jackson json parsing پیاده سازی MVP Pattern در اندروید مفهوم Pattern در برنامه نویسی انواع Pattern های رایج در برنامه نویسی اندروید آشنایی با MVP Pattern در اندروید پیاده سازی MVP در اندروید پیاده سازی Dependency Injection در اندروید مفهوم Dependency Injection در برنامه نویسی انواع کتابخانه های رایج در DI برنامه نویسی اندروید آشنایی با کتابخانه Dagger 2 آشنایی با تغییرات اندرویدM و N Shade Animation CordinatorLayout Permission in Android 6 آشنایی با Kotlin معرفی kotlin پیاده سازی kotlin در اندروید استودیو ایجاد App Widgets برای اپلیکیشن معرفی widget در اندروید هدف از پیاده سازی App widgets در اندروید ارتباط بین App Widgets و اپلیکیشن پیاده سازی App Widgets در اپلیکیشن ایجاد کتابخانه در اندروید معرفی مفهوم کتابخانه در اندروید انواع کتابخانه های قابل پشتیبانی در اندروید ایجاد کتابخانه در اندروید Import کردن کتابخانه به پروژه و استفاده از آن Flavor در اندروید استودیو آشنایی با flavor در اندروید استودیو ایجاد چند خروجی از اپلکیشن ایجاد خروجی های free,purchase,paid برای اپلیکیشن Testing اپلیکیشن آشنایی با مفهوم Test در مهندسی نرم افزار آشنایی با کتابخانه Junit آشنایی با کتابخانه Espresso در Test Driven Android اندروید خروجی اندروید ایجاد کلید Sign در اندروید مهندسی معکوس اپلیکیشن های اندروید آشنایی با Proguard در اندروید انتشار اپلیکیشن در گوگل پلی این دوره توصیه میشود به : اشخاصی كه علاقه مند به آشنایی و كار حرفه ای با اندروید هستند. اشخاصی كه قصد فراگیری كامل طراحی اپلیکیشن های موبایل از ابتدا توسط اندروید دارند. اشخاصی كه قصد راه اندازی اپلیکیشن موبایل شخصی خود توسط اندروید دارند. اشخاصی كه میخواهند با فراگیری حرفه ای شروع به كسب درآمد نموده و به عنوان توسعه دهنده اندروید فعالیت كنند. شركتها و سازمانهایی كه قصد راه اندازی اپلیکیشن موبایل اندروید اختصاصی خود را دارند. دانشجویان رشته های كامپیوتر كه قصد فراگیری كامل توسعه اپلیکیشن های اندروید دارند. اشخاصی كه قصد پیاده سازی ایده های اپلیکیشن های موبایل را در قالب اندروید دارند. اشخاصی كه قصد دارند وب سایت خود را به اپلیکیشن های موبایل اندروید تبدیل كنند. و... ثبت نام دوره اندروید
  18. 2 likes
  19. 2 likes
    ما نرم افزار ساخته ایم برای دانشجو ها . امکاناتش جالبه پیشنهاد میکنم دانلود کنید اگر مشکلی داشت یا پیشنهادی داشتید با ما اطلاع بدید . با تشکر . لینک دانلود :http://iranapps.com/app/com.hsb.daneshjoo ارتباط با ما : h.myapps@gmail.com
  20. 2 likes
    توی این پست میخوایم طریقه کار با دیتابیس خارجی رو اموزش بدیم. برای این کار با نرم افزار SQLite Expert Personal یا هر نرم افزاری که راحت بودین دیتابیس و درست می کنیم. توی این برنامه دیتابیس ExternalDB رو با یک جدول به نام tbl1 و دو فیلد به نامهای Id و Name ایجاد کردیم. و داده های مورد نظر را توی جدول وارد میکنیم. کارمون با دیتابیس خارجی تموم شد حالا برنامه نویسی رو شروع می کنیم. پروژه جدیدی ایجاده کرده و دیتابیسی که درست کرده بودیم و توی پوشه asset قرار میدیم. فایل Database.java رو ایجاد کرده و کد زیر رو توی اون تایپ می کنیم. package com.p30droid.externaldatabase; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; public class Database extends SQLiteOpenHelper { String DB_PATH = null; public static String DB_NAME = "ExternalDB"; private SQLiteDatabase myDataBase; private final Context myContext; /** * Constructor Takes and keeps a reference of the passed context in order to * access to the application assets and resources. * * @param context */ public Database(Context context) { super(context, DB_NAME, null, 2); this.myContext = context; DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/"; } public void createDataBase() throws IOException { boolean dbExist = checkDataBase(); if (dbExist) { // do nothing - database already exist } else { // By calling this method and empty database will be created into // the default system path // of your application so we are gonna be able to overwrite that // database with our database. this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } private boolean checkDataBase() { SQLiteDatabase checkDB = null; try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } catch (SQLiteException e) { // database does't exist yet. } if (checkDB != null) { checkDB.close(); } return checkDB != null ? true : false; } /** * Copies your database from your local assets-folder to the just created * empty database in the system folder, from where it can be accessed and * handled. This is done by transfering bytestream. * */ private void copyDataBase() throws IOException { // Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; // Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); // transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } // Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException { // Open the database String myPath = DB_PATH + DB_NAME; // SQLiteDatabase.NO_LOCALIZED_COLLATORS myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY); } @Override public synchronized void close() { if (myDataBase != null) myDataBase.close(); super.close(); } // return cursor public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) { return myDataBase.query("pwp_singers", null, null, null, null, null, null); } @Override public void onCreate(SQLiteDatabase arg0) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO Auto-generated method stub } } خط 21 اسم دیتابیس و قرار دادیم.توابع دیگه هم مربوط به باز کردن،بستن،چک کردن وجود دیتابیس و ... هست(لازم به توضیح بود بگین توضیح بدمش) توی فایل activity_main.xml یه لیست ویو قرار میدیم. توی فایلMainActivity.java کد زیر و تایپ می کنیم. package com.p30droid.externaldatabase; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.app.Activity; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; public class MainActivity extends Activity { Database myDbHelper; SQLiteDatabase db; ListAdapter adapter; ArrayList> data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lst=(ListView) findViewById(R.id.listView1); Load_Database(); db = myDbHelper.getReadableDatabase(); Cursor c = db.rawQuery("select * from tbl1", null); data = new ArrayList>(); for (; c.moveToNext() { HashMap map = new HashMap(); String id = c.getString(c.getColumnIndex("Id")); String name = c.getString(c.getColumnIndex("Name")); map.put("id", id); map.put("name", name); data.add(map); } adapter = new list_view(this, data); lst.setAdapter(adapter); } private void Load_Database() throws Error { myDbHelper = new Database(MainActivity.this); try { myDbHelper.createDataBase(); } catch (IOException ioe) { throw new Error("Unable to create database"); } try { myDbHelper.openDataBase(); } catch (SQLException sqle) { throw sqle; } } } خط 25 دیتابیس و چک میکنیم که ایجاد شده یا نه.اگه هست بازش کنه اگه نه ایجاد میکنه. خط 27 اسم جدول و نوشتیم تا اطلاعات اونو بخونیم. خط 32و 33 فیلدهایی که میخوایم و قرار دادیم و در اخر هم با اداپتور اونو توی لیست ویو میریزیم. خط 38 هم از لیست ویو سفارشی استفاده کردیم که اموزشش تو سایت هست . اینم فایلهاش فایل list_view.java package com.p30droid.externaldatabase; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.res.AssetManager; import android.graphics.Color; import android.graphics.Typeface; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class list_view extends BaseAdapter { private Activity activity; private ArrayList> data; private LayoutInflater inflate; ViewHolder holder; public list_view(Activity a, ArrayList> d) { // TODO Auto-generated constructor stub activity = a; data = d; inflate = (LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int arg0, View view, ViewGroup arg2) { // TODO Auto-generated method stub View v1 = view; if (v1 == null) { v1 = inflate.inflate(R.layout.list_view, null); holder = new ViewHolder(); holder.txt_name = (TextView) v1.findViewById(R.id.txt_name); holder.txt_id = (TextView) v1.findViewById(R.id.txt_id); holder.txt_id.setVisibility(View.GONE); v1.setTag(holder); } else { holder = (ViewHolder) v1.getTag(); } HashMap song = new HashMap(); song = data.get(arg0); holder.txt_id.setText(song.get("id")); holder.txt_name.setText(song.get("name")); return v1; } static class ViewHolder { TextView txt_name; TextView txt_id; } } فایل list_view.xml <?xml version="1.0" encoding="utf-8"?> android:layout_width="fill_parent" android:layout_height="fill_parent" > android:id="@+id/txt_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="22dp" android:layout_marginTop="30dp" /> android:id="@+id/txt_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/txt_name" android:layout_marginRight="96dp" android:layout_toLeftOf="@+id/txt_name" /> و خروجی کار سورس برنامه
  21. 2 likes
    سلام میتونید از این دستورات استفاده کنید: Locale locale_fa = new Locale("fa", "IR"); getResources().getConfiguration().setLocale(locale_fa); در MainActivity و در بخش onCreate...
  22. 2 likes
    سلام جدیترین پست ها "ببینید هر پستی که قرار میگیره یک ایدی جدیدی میگیره میتونید بر اساس بزرگترین ایدی سورت کنید" select * from tblName order by id desc حالا اگر میخواید صفحه بندی بشه مثلا هر سری 10 تا پست رو بیاره به این صورت بزنید select * from tblName order by id desc limit 0,10 0 >> از شماره مثلا از شماره 1 10 >> تعداد 10 تا به 10 حالا بر اساس ویو ها select * from tblName order by view desc حالا اون های که دیده شدندشما باید یک فیلیدی به دیتا بیس اضافه کنید و هر وقت اون پست دیده شد عدد اون رو از 0 به یک تغییر بدید یعنی این پست دیده شده البته اگر بخواید توسط خود کاربر دیده بشه باید یک جدول دیگه ای بزنید و ایدی پست همراه با ایدی کاربر رو توی اون جدول ذخیره کنید و از join توی mysql استفاده کنید select * from tblName where post_view=1 برای سوال بعدیتون که کاقه بازار رو مثال زدید این بستگی داره به کد نویسی شما مثلا میتونید یک اداپتر بنویسید و 3 model و یا به هر نحو دیگه ای 3 اداپتر و.... بستگی داره به قدرت برنامه نویسی تمیزی نوشتن کد و رعایت خیلی از اصول های دیگه درمورد سوال اخرت هم درست متوجه نشدم ولی من بیشتر view pager هام رو کاستوم میکنم برای استفاده های بیشتر
  23. 2 likes
    سلام دوستان اینجام میخوام آموزشی بدم که میتونه خیلی کاربرد داشته باشه شاید در برخی مواقعه دیده باشید که برخی از برنامه ها همراه با متن معمولی لینک قرار میدن اینجا میخوام آموزش بدم که چطور این کار رو میشه انجام داد. برای این کار ما از کتاب خانه Linkify استفاده میکنیم میتونید مستندات کاملش رو از ادرس زیر مطالعه کنید. https://developer.android.com/reference/android/text/util/Linkify.html خوب ما اول باید یک pattern ایجادکنیم کار این pattern چی هستش ما میایم متنی رو که میخوایم لینک دار کنیم رو به این pattern میدیم Pattern pattern= Pattern.compile("جواد زبیدی زاده"); خب حالا اگر ما بخوایم لینک به وسیله scheme خود برنامه خودمون باز بشه یا به وسیله هر برنامه دیگه میاد متنی رو که داخل pattern نوشتیم رو ارسال میکنه اگر بخوایم متن دلخواهی بفرستیم میاید از خاصیت TransformFilter استفاده میکنیم به مثل زیر توجه کنید مثال : اگر عنوان لینک نام و نام خانوادگی کاربر باشه(جواد زبیدی زاده) و بخوایم نام کاربری رو بفرستیم (Javadzobeidi) میایم به صورت زیر انجام میدیم Linkify.TransformFilter username = new Linkify.TransformFilter() { @Override public String transformUrl(Matcher match, String url) { return "javadzobeidi"; } }; حالا باید ویوی که متن توی اون هستش رو هم تعریف کنیم که اینجا Textview هستش TextView event_message = (TextView)itemView.findViewById(R.id.event_message); event_message.setText("جواد زبیدی زاده یک پیغامی برای شما ارسال کرده است"); خب حالا وقتش شده لینک رو ایجاد کنیم گفتیم از کلاس Linkify استفاده میکنیم Linkify.addLinks(event_message,pattern,"myScheme://?username=",null,username); توی کد بالا اگر توجه کنید من یک scheme ایجاد کردم myScheme://?username= این scheme هستش که من با اون اطلاعات رو میگیرم خب اگر تا اینجا درست انجام داده باشید لینک همراه با متن نمایش داده میشه ولی خب یک زیر خط همراه لینک به نمایش در میاد که بهش میگن Underlines برای حذف این زیر خط باید کلاس و تابع زیر رو بنویسید /** * Delete Under Line From Link in Text View Class */ public static class URLSpanNoUnderline extends URLSpan { public URLSpanNoUnderline(String p_Url) { super(p_Url); } public void updateDrawState(TextPaint p_DrawState) { super.updateDrawState(p_DrawState); p_DrawState.setUnderlineText(false); } } /** * Delete Under Line From Link in Text View method * Enterd Text View Get text */ public static void removeUnderlines(Spannable p_Text) { URLSpan[] spans = p_Text.getSpans(0, p_Text.length(), URLSpan.class); for(URLSpan span:spans) { int start = p_Text.getSpanStart(span); int end = p_Text.getSpanEnd(span); p_Text.removeSpan(span); span = new URLSpanNoUnderline(span.getURL()); p_Text.setSpan(span, start, end, 0); } } و کد زیر رو کنار کد ایجاد لینک قرار بدید // Make sure the TextView was instantiated correctly if(event_message != null) { removeUnderlines((Spannable)event_message.getText()); } و من الله التوفیق
  24. 2 likes
    در متد oncreat() این کد رو اضافه کنید this.inflatedView = inflater.inflate(R.layout.fragment_name, container, false); sendButton = (Button) inflatedView.findViewById(R.id.sendTextButton); نحوه ی تعریف بصورتی ک در کد مشاهده میکنید هست.
  25. 2 likes
    وقتی که میخوایم داده هایی رو از کاراکتر ها و یا ارایه ها بخونیم میتونیم اونها رو داخل یک bufferreader بریزیم.و سپس اونها رو بخونیم. تو اینجا یه مثال ساده گذاشتم امیدوارم ب دردت بخوره.توضیح کد اینه ک یه اریه از نوع char داریم و یه بافر ریدر هم تعریف کردیم.میخایم با استفاده از داده های اریه ی char رو بخونیم و برزیم داخل بافر ریدر . بعدش این بافر ریدر رو به رشته تبدیل میکنیم. char[] char_me=arr_char; StringBuffer result = new StringBuffer(); for (int i = 0; i < arr_char.size(); i++) { result.append( char_me[i] ); } String str=result.toString();
  26. 2 likes
    در این مقاله، میخواهیم یاد بگیریم به چه صورتی میتوانیم متغیر ها را در کاتلین تعریف نماییم قبل از شروع این آموزشی حتما مطلب آموزشی زیر را مطالعه کنید تعریف متغیر ها در کاتلین،همه چیز یک OBject میباشد ،زیرا در کاتلین نوع اصلی نمی توانیم پیدا کنیم تعریف اولین متغیر شما میتوانید براحتی با کلمه کلیدی val یا var متغیر و نوع آن را تعریف کنید var i: Int=1 var d: Double=1.1 var f: Float=1.1F var l : Long=1L var c : Char ='c' var s: String="P30droid" با همین مثال های بالا ما تعداد شی با مقداد دهی اولیه ایجاد کنیم در کاتلین سمی کالن نداریم حافظه متغیر ها در کاتلین همچنین درکاتلین میتوانید متغیر یک متغیر جدید را بدون تعریف نوع آن فقط با مقداردهی یک متغیر دیگر که قبلا تعریف شده است را ایجاد کرد var ii= i+1 var dd= d+2.0 var ff= f+1 var ll= 1+1 var ss=s + "Iranian developers forum" println("ii : $ii , dd: &dd, ff: $ff,ll : &ll,ss : &ss") خروجی ii :2, dd : 3.1, ff :2, ss :P30droid Android Developers forum رشته ها در کاتلین : کار کردن با رشته ها در کاتلین به سادگی آب خوردن هستش var s : "Android" var ss : "My name is $s" // My name is Android var c : s[2] // this will assign character 'i' با صدا زدن کاراکتر & میتوانید به مقدار یک متغیر دسترسی پیدا کرد Type Casting در کاتلین در کاتلی به سادگی میتوانید Type Casting را انجام دهید var i: Int =1 var d: Double = i // Not possible var d : Double = t.toDouble() // Ok
  27. 2 likes
    این کلمه‌ی کلیدی در مبحث thread مطرح می‌شود. وقتی چند thread با یک متغیر (مثلا یک شی) عادی کار می‌کنند، ممکن است آن را cache کنند. یعنی هر thread ای که این متغیر را cache کند، یک نسخه از آن گرفته و با آن کار می‌کند (تغییرات اعمالی بر روی آن توسط یک thread، به سایر thread ها منعکس نمی‌شود) اگر آن متغییر با کلمه‌ی کلیدی volatile تعریف شود، تنها یک نسخه از آن متغیر وجود دارد و تغییراتی که یک thread بر روی آن انجام می‌دهد، بلافاصله در thread های دیگر منعکس می‌شود. public class VolatileTest { private static final Logger LOGGER = MyLoggerFactory.getSimplestLogger(); private static volatile int MY_INT = 0; public static void main(String[] args) { new ChangeListener().start(); new ChangeMaker().start(); } static class ChangeListener extends Thread { @Override public void run() { int local_value = MY_INT; while ( local_value < 5){ if( local_value!= MY_INT){ LOGGER.log(Level.INFO,"Got Change for MY_INT : {0}", MY_INT); local_value= MY_INT; } } } } static class ChangeMaker extends Thread{ @Override public void run() { int local_value = MY_INT; while (MY_INT <5){ LOGGER.log(Level.INFO, "Incrementing MY_INT to {0}", local_value+1); MY_INT = ++local_value; try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } } } output با استفاده از volatile ... Incrementing MY_INT to 1 Got Change for MY_INT : 1 Incrementing MY_INT to 2 Got Change for MY_INT : 2 Incrementing MY_INT to 3 Got Change for MY_INT : 3 Incrementing MY_INT to 4 Got Change for MY_INT : 4 Incrementing MY_INT to 5 Got Change for MY_INT : 5 output بدون استفاده از volatile ... Incrementing MY_INT to 1 Incrementing MY_INT to 2 Incrementing MY_INT to 3 Incrementing MY_INT to 4 Incrementing MY_INT to 5 نکته: استفاده از Volatile در برنامه هایی که تنها از یه Thread استفاده می شه کاربردی نداره…
  28. 2 likes
    قبل از بحث درباره پیاده سازی Singleton، اجازه دهید یکسری سوالات پایه ای را مطرح کنیم و به آنها پاسخ دهیم. هدف استفاده از Singleton Pattern همانطور که از نام آن مشخص است، Singleton Pattern فقط اجازه می دهد یک نمونه از class ساخته شود. چه زمانی نیاز داریم که یک نمونه از کلاس ساخته شود؟ خیلی وقت ها نیاز است که فقط یک نمونه از یک کلاس ساخته شود. مثلاً وقتی که نمی خواهیم وضعیت شی تغییر کند و یا می خواهیم class را به صورت stateless نگه داریم. به عنوان مثال زمانی که می خواهید یکسری داده های master را یکجا بارگذاری کنید و اجازه دهید مصرف کنندگان داده به جای فراخوانی های متعدد، با ساخت یک نمونه از کلاس، یک فراخوانی به یک کلاس Singleton داشته باشند. در حالت کلی، در هر برنامه Enterprise پیچیده، می توان به کلاس های Repository و لایه Data Access به صورت Singleton نگاه کرد. درحالیکه معمولاً نمی خواهیم وضعیت در این لایه ها حفظ شود. از جمله مثال های دیگر می توان به بحث log گیری، تنظیمات (configuration)، Caching و غیره اشاره کرد که می توان آن ها را به صورت Singleton پیاده سازی کرد. چرا که نیاز به یک نقطه مرکزی و سراسری خواهیم داشت تا به این کلاس ها دسترسی داشته باشیم. گذشته از توضیحات فوق، دیده شده است که برخی از برنامه نویسان بی تجربه یکسری نمونه های اضافی می سازند که نه نتها باعث سربار حافظه می شوند، بلکه کارایی برنامه را تحت تاثیر قرار می دهند. چرا کلاس های static به دلایل مختلفی نباید از کلاس های static استفاده کنیم. برخی از این دلایل عبارتند از: · موارد مختلفی هست هست که می خواهید Interface ها را در یک کلاس پیاده سازی کنید (برای مثال پیاده سازی IOC- بعداً به توضیح IOC خواهم پرداخت) و به جای پیاده سازی کلاس به صورت static، آن را به صورت Singleton پیاده سازی می کنیم. · در صورت نیاز، می توانید از یک کلاس singleton به صورت پارامتر یک متد استفاده کنید درحالیکه نمی توان این کار را با کلاس static انجام داد. نکته مهم درباره کلاس های Singleton ایده وضعیت یک کلاس از آنجا نشآت گرفته است که شما نیاز دارید یکسری هماهنگی در محیط های چند نخی (multi-threaded enviroments) ایجاد کنید. اجازه دهید نگاهی به یک پیاده سازی ساده داشته باشیم. در اولین مثال، یک Singleton با Lazy loading پیاده سازی شده است و تا زمانیکه فراخواننده، متد GetInstance را برای اولین بار فراخوانی نکند، نمونه ایجاد نمی شود. public class SingletonClass { private static SingletonClass instance = null; private SingletonClass() { } public static SingletonClass GetInstance { get { if (instance == null) { instance = new SingletonClass(); } return instance; } } اجازه دهید مشکل هماهنگی، که در محیط های چند نخی با آن مواجه هستیم را بر طرف کنیم. برای همین منظور از یک مکانیزم دوقفله استفاده خواهیم کرد: private static SingletonClass instance = null; private static object lockMe = new object(); private SingletonClass() { } public static SingletonClass GetInstance { get { if (instance == null) { lock (lockMe) { if (instance==null) { instance = new SingletonClass(); } } } return instance; } } و در آخر، Singleton با مقداردهی اولیه static. لطفاً توجه داشته باشید .NET Framework ایمنی thread در زمان مقداردهی اولیه تضمین می کند و دیگر نیازی نیست نگران مسائل هماهنگی باشیم. اگر چه دیگر از مزایای Lazy loading اشیاء برخوردار نخواهیم بود. private static SingletonClass instance = new SingletonClass(); public SingletonClass() { } private static SingletonClass GetInstance { get { return instance; } }
  29. 2 likes
    استفاده از Parcelable یک راه مناسب و مفید برای انتقال یا پاس دادن اطلاعات بین کامپوننت های اندروید می باشد. Parcelable یک مکانیسم سریال سازی است که توسط Android ارائه می شود. برای نوشتن یک شی به صورت Parcelable، باید انرا به اندروید استودیو اضافه کرد. برای این کار می توانید از آدرس زیر کمک بگیرید: http://corochann.com/fast-easy-parcelable-implementation در این اینجا، ما خواهیم ببینیم که چگونه یک شی Parcelable را در یک برنامه Android اجرا کنیم تا اطلاعات پیچیده را از یک اکتیویتی به اکتیویتی دیگر انتقال دهیم. import android.os.Parcel; import android.os.Parcelable; import android.util.Log; public class Student implements Parcelable{ String mSName; int mSAge; String mSAddress; String mSCourse; @Override public int describeContents() { // TODO Auto-generated method stub return 0; } /** * Storing the Student data to Parcel object **/ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(mSName); dest.writeInt(mSAge); dest.writeString(mSAddress); dest.writeString(mSCourse); } /** * A constructor that initializes the Student object **/ public Student(String sName, int sAge, String sAddress, String sCourse){ this.mSName = sName; this.mSAge = sAge; this.mSAddress = sAddress; this.mSCourse = sCourse; } /** * Retrieving Student data from Parcel object * This constructor is invoked by the method createFromParcel(Parcel source) of * the object CREATOR **/ private Student(Parcel in){ this.mSName = in.readString(); this.mSAge = in.readInt(); this.mSAddress = in.readString(); this.mSCourse = in.readString(); } public static final Parcelable.Creator<Student> CREATOR = new Parcelable.Creator<Student>() { @Override public Student createFromParcel(Parcel source) { return new Student(source); } @Override public Student[] newArray(int size) { return new Student[size]; } }; } import android.app.Activity; import android.os.Bundle; import android.widget.TextView; public class StudentViewActivity extends Activity { TextView mTvSName; TextView mTvSAge; TextView mTvSAddress; TextView mTvSCourse; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_student); // Fetching data from a parcelable object passed from MainActivity Student student = getIntent().getParcelableExtra("student"); // Getting reference to TextView tv_sname of the layout file activity_student mTvSName = (TextView)findViewById(R.id.tv_sname); // Getting reference to TextView tv_sage of the layout file activity_student mTvSAge = (TextView) findViewById(R.id.tv_sage); // Getting reference to TextView tv_saddress of the layout file activity_student mTvSAddress = (TextView) findViewById(R.id.tv_saddress); // Getting reference to TextView tv_scourse of the layout file activity_student mTvSCourse = (TextView) findViewById(R.id.tv_scourse); if(student!=null){ mTvSName.setText("Name:"+student.mSName); mTvSAge.setText("Age:"+Integer.toString(student.mSAge)); mTvSAddress.setText("Address:"+student.mSAddress); mTvSCourse.setText("Course:"+student.mSCourse); } } } import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; public class MainActivity extends Activity { EditText mEtSName; EditText mEtSAge; EditText mEtSAddress; EditText mEtSCourse; Button mBtnOk; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Getting a reference to EditText et_sname of the layout activity_main mEtSName = (EditText)findViewById(R.id.et_sname); // Getting a reference to EditText et_sage of the layout activity_main mEtSAge = (EditText)findViewById(R.id.et_sage); // Getting a reference to EditText et_saddres of the layout activity_main mEtSAddress = (EditText)findViewById(R.id.et_saddress); // Getting a reference to EditText et_scourse of the layout activity_main mEtSCourse = (EditText)findViewById(R.id.et_scource); // Getting a reference to Button btn_ok of the layout activity_main mBtnOk = (Button)findViewById(R.id.btn_ok); // Setting onClick event listener for the "OK" button mBtnOk.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // Creating an instance of Student class with user input data Student student = new Student(mEtSName.getText().toString(), Integer.parseInt(mEtSAge.getText().toString()), mEtSAddress.getText().toString(), mEtSCourse.getText().toString()); // Creating an intent to open the activity StudentViewActivity Intent intent = new Intent(getBaseContext(), StudentViewActivity.class); // Passing data as a parecelable object to StudentViewActivity intent.putExtra("student",student); // Opening the activity startActivity(intent); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } }
  30. 2 likes
    برای افزایش سرعت و همچنین بهینه سازی برنامه می توانیم از برنامه نویسی چند نخی « Thread » استفاده نماییم. با این کار می توانیم وظایف برنام را به چند قسمت تقسیم و به طور همزمان انجام بدهیم تا سرعت بالاتری برای برنامه رقم بزنیم. برنامه نویسی چند نخی یکی از اساسی ترین و مهمترین ارکان برنامه نویسی می باشد که متأسفانه حتی بسیاری از برنامه نویسان حرفه ای نیز آنرا نادیده می گیرند. چرا که با وجود سرعت های بالای CPU در سخت افزارهای PC و Notebook نیاز به استفاده از Thread ها به چشم نمی آید اما یکی از بزرگترین دلایل وجود Hang و در نتیجه Crash ها عدم توجه به این تکنیک برنامه نویسی می باشد. در دستگاه های ضعیف تر نظیر Smart Phone ها استفاده از Thread ها بسیار واجب و ضروری می باشد و حتی برای انجام هر عمل کم زمانبر نیز استفاده از Thread ها اکیداً توصیه می گردد. new Thread(new Runnable() { @Override public void run() { // your codes } }).start(); بد نیست که همین کد بالا را به شیوه ای دیگر بنویسیم : Runnable runnable = new Runnable() { public void run() { // your codes } }; Thread myThread = new Thread(runnable); myThread.start();
  31. 2 likes
    با آمدن ORM‌ها به دنیای برنامه نویسی، کار برنامه نویسی نسبت به قبل ساده‌تر و راحت‌تر شد. عدم استفاده کوئری‌های دستی، پشتیبانی از چند دیتابیس و از همه مهمتر و اصلی‌ترین هدف این ابزار "تنها درگیری با اشیا و مدل شیء گرایی" کار را پیش از پیش آسان‌تر نمود. در این بین به راحتی می‌توان چندین نمونه از این ORM‌ها را نام برد مثل IBatis , Hibernate ,Nhibernate و EF که از معروفترین آن‌ها هستند.من در حال حاضر قصد شروع یک پروژه اندرویدی را دارم و دوست دارم بجای استفاده‌ی از Sqlitehelper، از یک ORM مناسب بهره ببرم که چند سوال برای من پیش می‌آید. آیا ORM ای برای آن تهیه شده است؟ اگر آری چندتا و کدامیک از آن‌ها بهتر هستند؟ شاید در اولین مورد کتابخانه‌ی Hibernate جاوا را نام ببرید؛ ولی توجه به این نکته ضروری است که ما در مورد پلتفرم موبایل و محدودیت‌های آن صحبت می‌کنیم. یک کتابخانه همانند Hibernate مطمئنا برای یک برنامه اندروید چه از نظر حجم نهایی برنامه و چه از نظر حجم بزرگش در اجرا، مشکل زا خواهد بود و وجود وابستگی‌های متعدد و دارا بودن بسیاری از قابلیت‌هایی که اصلا در بانک‌های اطلاعاتی موبایل قابل اجرا نیست، باعث می‌شود این فریمورک انتخاب خوبی برای یک برنامه اندروید نباشد.معیارهای انتخاب یک فریم ورک مناسب برای موبایل: سبک بودن: مهمترین مورد سبک بودن آن است؛ چه از لحاظ اجرای برنامه و چه از لحاظ حجم نهایی برنامه سریع بودن: مطمئنا ORM‌های طراحی شده‌ی موجود، از سرعت خیلی بدی برخوردار نخواهند بود؛ اگر سر زبان هم افتاده باشند. ولی باز هم انتخاب سریع بودن یک ORM، مورد علاقه‌ی بسیاری از ماهاست. یادگیری آسان و کانفیگ راحت تر. greenDAO-master.zip
  32. 2 likes
    سلام متاسفانه اون قسمتی که احتیاج داشتم نزاشتین یا اینکه اگه امکان داره تو کلاس اکتیویتی تون ببینین خط 100 چه کدی داره؟ خط 100 MainActivity یه ابجکت دارین که Null هستش
  33. 2 likes
    سلام دوست عزیز میتونید پارامتر های زیر رو ست کنید که باعث میشه دیگه از کش نخونه هر مرتبه از رو سرور بخونه Picasso.with(context).load(url).networkPolicy(NetworkPolicy.NO_CACHE).memoryPolicy(MemoryPolicy.NO_CACHE);
  34. 2 likes
    اینکار امکان پذیر نیستش ،فقط میتونید اینکارو کنید که مجوز ها به صورت گروهی داده شود activity_main.xml <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="info.androidhive.mpermissions.MainActivity"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <RelativeLayout android:id="@+id/content_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context="info.androidhive.mpermissions.MainActivity" tools:showIn="@layout/activity_main"> <Button android:id="@+id/btnLaunchMultiplePermission" android:layout_below="@+id/imageView" android:layout_marginTop="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Request Multiple Permissions"/> <Button android:id="@+id/btnLaunchPermissionFragment" android:layout_below="@+id/btnLaunchMultiplePermission" android:layout_marginTop="10dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Request Permission on Fragment"/> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/single_permission_text" android:textAlignment="center" android:layout_alignParentBottom="true" android:layout_alignParentStart="true" android:layout_marginBottom="123dp" /> </RelativeLayout> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" app:srcCompat="@drawable/ic_file_download_black_24dp" /> </android.support.design.widget.CoordinatorLayout> Manifest : <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> import android.Manifest; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.net.Uri; import android.provider.Settings; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.View; import android.widget.Button; import android.widget.TextView; import android.widget.Toast; public class MultiplePermissionsActivity extends AppCompatActivity { private static final int PERMISSION_CALLBACK_CONSTANT = 100; private static final int REQUEST_PERMISSION_SETTING = 101; String[] permissionsRequired = new String[]{Manifest.permission.CAMERA, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}; private TextView txtPermissions; private Button btnCheckPermissions; private SharedPreferences permissionStatus; private boolean sentToSettings = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_multiple_permissions); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); permissionStatus = getSharedPreferences("permissionStatus",MODE_PRIVATE); txtPermissions = (TextView) findViewById(R.id.txtPermissions); btnCheckPermissions = (Button) findViewById(R.id.btnCheckPermissions); btnCheckPermissions.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if(ActivityCompat.checkSelfPermission(MultiplePermissionsActivity.this, permissionsRequired[0]) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(MultiplePermissionsActivity.this, permissionsRequired[1]) != PackageManager.PERMISSION_GRANTED || ActivityCompat.checkSelfPermission(MultiplePermissionsActivity.this, permissionsRequired[2]) != PackageManager.PERMISSION_GRANTED){ if(ActivityCompat.shouldShowRequestPermissionRationale(MultiplePermissionsActivity.this,permissionsRequired[0]) || ActivityCompat.shouldShowRequestPermissionRationale(MultiplePermissionsActivity.this,permissionsRequired[1]) || ActivityCompat.shouldShowRequestPermissionRationale(MultiplePermissionsActivity.this,permissionsRequired[2])){ //Show Information about why you need the permission AlertDialog.Builder builder = new AlertDialog.Builder(MultiplePermissionsActivity.this); builder.setTitle("Need Multiple Permissions"); builder.setMessage("This app needs Camera and Location permissions."); builder.setPositiveButton("Grant", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); ActivityCompat.requestPermissions(MultiplePermissionsActivity.this,permissionsRequired,PERMISSION_CALLBACK_CONSTANT); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.show(); } else if (permissionStatus.getBoolean(permissionsRequired[0],false)) { //Previously Permission Request was cancelled with 'Dont Ask Again', // Redirect to Settings after showing Information about why you need the permission AlertDialog.Builder builder = new AlertDialog.Builder(MultiplePermissionsActivity.this); builder.setTitle("Need Multiple Permissions"); builder.setMessage("This app needs Camera and Location permissions."); builder.setPositiveButton("Grant", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); sentToSettings = true; Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivityForResult(intent, REQUEST_PERMISSION_SETTING); Toast.makeText(getBaseContext(), "Go to Permissions to Grant Camera and Location", Toast.LENGTH_LONG).show(); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.show(); } else { //just request the permission ActivityCompat.requestPermissions(MultiplePermissionsActivity.this,permissionsRequired,PERMISSION_CALLBACK_CONSTANT); } txtPermissions.setText("Permissions Required"); SharedPreferences.Editor editor = permissionStatus.edit(); editor.putBoolean(permissionsRequired[0],true); editor.commit(); } else { //You already have the permission, just go ahead. proceedAfterPermission(); } } }); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if(requestCode == PERMISSION_CALLBACK_CONSTANT){ //check if all permissions are granted boolean allgranted = false; for(int i=0;i<grantResults.length;i++){ if(grantResults[i]==PackageManager.PERMISSION_GRANTED){ allgranted = true; } else { allgranted = false; break; } } if(allgranted){ proceedAfterPermission(); } else if(ActivityCompat.shouldShowRequestPermissionRationale(MultiplePermissionsActivity.this,permissionsRequired[0]) || ActivityCompat.shouldShowRequestPermissionRationale(MultiplePermissionsActivity.this,permissionsRequired[1]) || ActivityCompat.shouldShowRequestPermissionRationale(MultiplePermissionsActivity.this,permissionsRequired[2])){ txtPermissions.setText("Permissions Required"); AlertDialog.Builder builder = new AlertDialog.Builder(MultiplePermissionsActivity.this); builder.setTitle("Need Multiple Permissions"); builder.setMessage("This app needs Camera and Location permissions."); builder.setPositiveButton("Grant", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); ActivityCompat.requestPermissions(MultiplePermissionsActivity.this,permissionsRequired,PERMISSION_CALLBACK_CONSTANT); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); builder.show(); } else { Toast.makeText(getBaseContext(),"Unable to get Permission",Toast.LENGTH_LONG).show(); } } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_PERMISSION_SETTING) { if (ActivityCompat.checkSelfPermission(MultiplePermissionsActivity.this, permissionsRequired[0]) == PackageManager.PERMISSION_GRANTED) { //Got Permission proceedAfterPermission(); } } } private void proceedAfterPermission() { txtPermissions.setText("We've got all permissions"); Toast.makeText(getBaseContext(), "We got All Permissions", Toast.LENGTH_LONG).show(); } @Override protected void onPostResume() { super.onPostResume(); if (sentToSettings) { if (ActivityCompat.checkSelfPermission(MultiplePermissionsActivity.this, permissionsRequired[0]) == PackageManager.PERMISSION_GRANTED) { //Got Permission proceedAfterPermission(); } } } } Download Sample M Permissions.zip
  35. 2 likes
    خواهش میکنم زمانی که احتیاج باشه یک فایل رو جا به جا کنید مثلا تصمیم دارین جای یک عکس رو تغییر بدین باید این دسترسی رو داشته باشه برنامتون.
  36. 2 likes
    فرض کنید شما یه برنامه نوشتید مثلا یه برنامه مدیریت sms تصمیم دارین وقتی یک پیغام جدید میاد به صورت popup یا یه دیالوگ نشون بدین اینو. حالا ممکنه کاربر مثلا داره تو اینترنت جستجو میکنه ، و یه پیغام میاد براش این پنجره شما به صورت popup روی اون برنامه میخواهید باز بشه باید این permission رو ست کنید. کلا زمانی که تصمیم داشته باشید پنجره برنامه شما روی همه برنامه های دیگه باز بشه باید این دسترسی داشته باشه.
  37. 2 likes
    سلام دوست عزیز با دستور زیر میتونید این کارو انجام بدین String str = "Your String! ...."; String newStr = str.substring(0, str.indexOf("!"));
  38. 2 likes
    خطا مشخصه چونکه اسم فیلد تو دیتابیس img_adrs میباشد و در cursro اشتباه نوشتید اینجوری بنویسید : String imgAddress=cursor.getString(cursor.getColumnIndex("img_adrs"));
  39. 2 likes
    سلام دوست عزیز toolbar درست ساخته نمیشه و Null هستش دلیلش این هستش که شما toolbar میسازین ولی به جای actionBar نمیزارینش قبل از خط 42 اینو اضافه کنید setSupportActionBar(toolbar);
  40. 2 likes
    کاربران گرامی انجمن برنامه نویسی اندروید پی سی دروید با درود چهار سالگی انجمن برنامه نویسی اندروید پی سی دروید مبارک باد همچنان که در طی سالیان گذشته در کنار ما بودید مبنی بر اینکه در روز 22 اسفند ماه که برابر است با چهار سالگی انجمن برنامه نویسی اندروید ، به پاس این روز نیک قصد داریم هدایایی را تقدیم کاربران انجمن پی سی دروید نماییم ،از این رو خوشحال میشویم شما در این روز با ما همراه باشید. خوشحال خواهیم نظرات خود را در مورد انجمن اندروید ایران با ما در میان بگذارید تا بتوانیم در سال جدید(۱۳۹۶) انجمنی پربارتر را داشته باشیم با احترام مدیر انجمن اندروید ایران (پی سی دروید) فرزاد سرسیفی
  41. 2 likes

    نگارش 1.0.0

    157 دانلود

    سورس اپلیکیشن فروشگاه اندروید

    رایگان

  42. 2 likes

    نگارش 1.0.0

    138 دانلود

    یک برنامه عالی برای تبدیل فایل های PDF به word بدون هیچگونه بهم ریختگی حتی پشتیبانی از فونت فارسی و پشتیبانی قوی و بیستو چهار ساعته

    رایگان

  43. 2 likes
    سلام اگه ممکنه کدی که برای ساخت دیتابیس نوشتین بزارین تا رو کدتون توضیح بدیم. اگه از کلاس SqLiteOpenHelper یه کلاس ساخته باشین باید برای دیتابیستون یه ورژن گذاشته باشین.حالا اگه این ورژن تغییر بدین (مثلا 1 بوده الان بزارین 2) و اینو تو متد onUpgrade مشخص کنید. دیتابیستون اپدیت میشه.این یک نمونه از این کلاس هستش. public class MyDataBase extends SQLiteOpenHelper { public AquaPlantDataBase(Context context) { super(context, DBConstantManager.DATABASE_NAME.MY_DATABASE_NAME , null, DBConstantManager.DATABASE_VERSION.DB_VERSION); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL(DBConstantManager.TABLE_SCRIPT.T_FAVORITS); sqLiteDatabase.execSQL(DBConstantManager.TABLE_SCRIPT.T_FILTERCACHE); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { } } اگه دقت کنید تو constructor یه ورژن دادم (آخرین پارامتر ورودی) وقتی دیتابیس شما ساخته میشه برای اولین بار این ورژن ثبت میشه و بعد از هر اپدیت برنامه این ورژن چک میشه در صورتی که ورژن جدید با قبلی یکی باشه تغییری انجام نمیشه ولی اگه این ورژن از قبلی یکی بیشتر باشه متد onupgrade صدا زده میشه و دیتابیستون اپدیت میشه.
  44. 2 likes
    سلام، اینارو سمت سرور تعیین میکنه فقط شما باید موقعیت مکانی lat lang رو به سرور بفرستید و سرور براساس اون تبلیغات های مورد نظر رو بفرسته
  45. 2 likes
    میدونی کلونی یعنی چی؟! کلونی یعنی محل تجمع، یعنی جایی که همه دور هم جمع میشن و کاری انجام میدن. میدونی که دیگه کم کم جستجو بین هزاران سایت داره منقضی و خسته کننده میشه؟! تااااااازه اگه توی هزارتا سایت بتونی مطلبی که میخواستی رو پیدا کنی مگه تبلیغات میزارن که کمی مطلبت رو بخونی ؟! دیگه نگران نباش. اپلیکیشن کلونی برای برطرف کردن این مشکلات ساخته شده. توی این برنامه میتونی تمامی خواسته هات رو برطرف کنی. اهل ورزشی؟ ماشین و موتور چی؟ به زیبایی و سلامت خودت اهمیت میدی؟ به غذاهایی که میخوری چطور؟ اوقات بیکاری چیکار میکنی؟ میدونی اگه بخوای هرکدوم از این موارد رو نگاه کنی و لذت ببری چقدر زمان نیاز داری تا بتونی واسه هر کدوم یک سایت یا یک اپلیکیشن مناسب پیدا کنی... چرا خودت رو اذیت میکنی؟ چرا حافظه موبایلت رو پر میکنی؟ چرا حجم اینترنتت رو بیخودی مصرف میکنی؟ بیا کلونی رو نصب کن و خودت رو راحت کن. بجای اینکه 100 تا سایت رو بگردی، کلونی رو 1بار بگرد ... --------------------------- ویژگی های کلونی : - بروزرسانی روزانه و مستمر - مصرف فوق العاده کم از حجم اینترنت - مصرف کم باتری و رم گوشی - رابط کاربری شیک و زیبا و ... ------------------------- دیگه زیاد توضیح نمیدم، خودت نصب کن تا متوجه شی لینک دانلود : https://cafebazaar.ir/developers/panel/apps/com.tellfa.colony/info/?l=fa ممنون میشم نصب کنید و در بازار نظر بدید
  46. 2 likes
    خیلی خیلی ممنونم درست شد... فقط این کد drawerLayout.closeDrawers(); برای چی بود ؟ برای من فورس کلوز میدادو برنامم رو می بست حذفش کردم و یه سوال دیگه اگر بخوام با آیتم خروج برنامم بسته بشه باید چی بنویسم
  47. 2 likes
    این کد کامل این اکتیویتی من هستش. public class BaseActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener { protected Toolbar mToolbar; protected DrawerLayout drawerLayout; protected NavigationView navigationView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_base); /* mToolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(mToolbar); getSupportActionBar().setDisplayShowTitleEnabled(false); */ drawerLayout = (DrawerLayout) findViewById(R.id.home_activity_drawer_layout); if (getWindow().getDecorView().getLayoutDirection() == View.LAYOUT_DIRECTION_LTR) { getWindow().getDecorView().setLayoutDirection(View.LAYOUT_DIRECTION_RTL); } navigationView = (NavigationView) findViewById(R.id.navigation_view); navigationView.setNavigationItemSelectedListener(this); } @Override public boolean onNavigationItemSelected(MenuItem item) { drawerLayout.closeDrawers(); switch (item.getItemId()) { case R.id.plants_drawer: { Intent intent = new Intent(BaseActivity.this, PlantActivity.class); startActivity(intent); return true; } case R.id.fishes_drawer: Intent intent = new Intent(BaseActivity.this, FishActivity.class); startActivity(intent); return true; /* case R.id.pest_algae_drawer: Toast.makeText(getApplicationContext(), "pest", Toast.LENGTH_SHORT).show(); return true;*/ case R.id.calculator_drawer: Toast.makeText(getApplicationContext(), "calculator", Toast.LENGTH_SHORT).show(); return true; default: return true; } } private void showDrawer() { drawerLayout.openDrawer(GravityCompat.START); } private void hideDrawer() { drawerLayout.closeDrawer(GravityCompat.START); } @Override public void onBackPressed() { if (drawerLayout.isDrawerOpen(GravityCompat.START)) hideDrawer(); else super.onBackPressed(); } @Override protected void attachBaseContext(Context context){ super.attachBaseContext(CalligraphyContextWrapper.wrap(context)); } } این قسمت رو هم اضافه کنید. من فراموش کردم متاسفانه navigationView.setNavigationItemSelectedListener(this);
  48. 2 likes
    با سلام 54 مگ گذاشتین برای دانلود ولی هنگام extract کردن faild میده !!!!
  49. 2 likes
    آقای قلندری دستت درد نکنه که زحمت ترجمه کتاب آموزش مقدماتی اندروید رو داری می کشی . واقعا ازت ممنونم . آیا این ترجمه ها رو ممکنه در آینده بصورت فایل پی دی اف برای دانلود قرار بدین ؟
  50. 2 likes
    یکی از امکاناتی که اندروید پیاده سازی شده AutoStartUp کردن اپلیکیشن میباشد بدین صورت وقتی که دیواس اندروید ریبوت یا روشن شد برنامه ما بصوت اتوماتیک اجرا شود. در این آموزش قصد داریم این امکان را پیاده سازی کنیم. ابتدا یک کلاس به نام BootUpReceiver را ایجاد میکنیم: public class BootUpReceiver extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub Intent i = new Intent(context, Dashboard.class); i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } در این کلاس ما از کلاس BroadcastReceiver ارث بری کرده و این کلاس باعث میشود در پس زمینه اجرا شود ، این کلاس باعث میشود همیشه در حال اجرا باشد. بعد از روشن شدن دیوایس باعث میشود اکتیویتی Dashboard باز شود. سپس در فایل اندروید مانیفست پروژه: <aplication> <receiver android:enabled="true" android:name=".BootUpReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </receiver> </aplication> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> انجمن پی سی دروید....