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

  1. Farzad Sarseifi

    Farzad Sarseifi

    مدیریت انجمن


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

      16

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

      2,114


  2. Omid Zakeri

    Omid Zakeri

    مدیر انجمن


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

      10

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

      113


  3. mehrdadmmb2

    mehrdadmmb2

    توسعه دهنده اندروید


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

      9

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

      69


  4. شاهرخ جهان زاده

    شاهرخ جهان زاده

    مدیر انجمن


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

      5

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

      74



Popular Content

Showing most liked content since ۱۷/۱۱/۱۴ in all areas

  1. 3 likes

    نگارش 1.0.0

    12 دانلود

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

    رایگان

  2. 2 likes
    سلام، این لینک آموزشه: https://github.com/SIMMORSAL/ViewDrag فقط این به انگلیسیه. کسی میتونه ترجمش کنه به فارسی که همه استفاده ببرن؟
  3. 2 likes
    سلام دوست عزیز 1. بله میتونه از طریق همون فایل php باشه. و یا زبان های دیگه. 2. توکن یک شناسه منحصر به فرد هستش که بین گوشی و سرور قرار داده میشه برای تشخیص صحت درخواست ارسالی از سمت سرور. 3. تو کدهاتون (به زبان جاوا) سعی کنید یوزر و پسورد رو به صورت String قرار ندین. بهتره از Char[ ] استفاده کنید. 4. و اینکه توکن میتونید encrypt کنید و تو گوشی نگهدارین و البته برای ارتباط با سرور هم اطلاعات رو به صورت encrypt شده بفرستین. 5. برای دیکامپایل نشدن کدها یا سختتر شدن دیکامپایل فایل خروجیتون بهتره زمانی که apk میسازید حتما proguard رو فعال کنید
  4. 2 likes
    تا به حال نرم افزار های زیادی از قبیل توییتر(twitter) , گوگل پلاس (+google) , جیمیل (gmail) را در اندروید دیده‌ایم که باswipe/pull down ( کشیدن صفحه به سمت پایین) محتوای خود را بروز میکنند . زمانی که صفحه را از بالا به پایین میکشیم یک محتوای جدیدی به ما نشان داده می‌شود یا اینکه محتوای قبلی بروزرسانی خواهد شد. در این آموزش میخواهیم کار با SwipeRefreshLayout را آموزش دهیم. این لایه به ما کمک می‌کند که طراحی اصولی (material designn) و کاربر پسندی را در برنامه های خود داشته باشیم. در یک آموزش مختصر با ما باشید تا به طور ساده با نحوه کار SwipeRefreshLayout (کشیدن صفحه به سمت پایین) آشنا شویم. این مثال نحوه ی Refresh(تازه سازی) کردن صفحه با استفاده از SwipeRefreshLayout را به شما نشان میدهد.مراحل را طبق زیر دنبال کنید. 1-با استفاده ار اندروید استودیو یک پروژه ی جدید با نام Swipe تحت بسته ی com.example.Swipeایجاد کنید. نحوه ی ایجاد پروژه ی جدید در بخش آموزشی ساخت اولین پروژه در اندروید استودیو توضیح داده شده است. 2- محتوای فایل res/layout/activity_main.xml را مانند آنچه در ادامه آمده است تغییر دهید. 3-محتوای فایل اکتیویتی اصلی java/com.example.sendemail/MainActivity.java را به منظور اجرای کدهای دلخواه پس از انجام عمل swipe/pull downn (کشیدن صفحه به سمت پایین)مانند آنچه در ادامه آمده است تغییر دهید. محتوای زیر مربوط به فایل res/layout/activity_main.xml می باشد. <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mySwipe" android:layout_width="match_parent" android:layout_height="match_parent" > <!-- کد خود را اینجا وارد کنید--> </android.support.v4.widget.SwipeRefreshLayout> این لایه(بالا) از کتابخانه‌ی زیر است. android.support.v4.widget در کد بالا ما لایه‌ی SwipeRefreshLayout را به عنوان لایه‌ی والد یا ریشه استفاده کرده ایم و درون آن می‌توانیم لایه ها و عناصر دیگر را به کار ببریم.به عنوان مثال میتوان به صورت زیر نوشت. <?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mySwipe" android:layout_width="match_parent" android:layout_height="match_parent" > <ScrollView android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="من یک متن هستم" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:gravity="center"/> </ScrollView> </android.support.v4.widget.SwipeRefreshLayout> معمولا درون این لایه یک recyclerView یا listView به کار می‌رود که در صورت تازه سازی (refresh) مقادیر آیتم ها دچار تغییر شوند(آیتم جدیدی وارد لیست شده یا از آن حذف شود). همچنین این لایه می‌تواند به عنوان یک لایه ی فرزند ظاهر شود. حالا نوبت این است که در اکتیویتی (activity) خود این لایه را وصل کنیم و از آن استفاده کنیم.در زیر محتوای فایل java/com.example.location/MainActivity.java آورده شده است. package com.example.Swipe; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { SwipeRefreshLayout mySwipe; @Override protected void onCreate(Bundle savedInstanceState) { ;( super.onCreate(savedInstanceState ;( setContentView(R.layout.activity_main ;( mySwipe = (SwipeRefreshLayout) findViewById(R.id.mySwipe () mySwipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener { @Override () public void onRefresh{ //اعمالی را که میخواهیم هنگام تازه سازی انجام شود ;( mySwipe.setRefreshing(false } ;({ } } داخل کد بالا ما با صدا زدن متد setOnRefreshListener با ورودی رابط (interface) OnRefreshListener می‌توان متد onRefresh را بازنویسی (override) کرده و داخل آن هر عملی که برای تازه سازی لازم است انجام داد. برای مثال زمانی که ما برنامه ای متصل به اینترنت داریم و میخواهیم با swipe کردن مقادیر را بروزرسانی کنیم در متد onRefresh میتوانیم وضعیت اتصال به اینترنت را چک کنیم و اگر متصل بود دیتا را از اینترنت دریافت کرده و مقادیر محتوای صفحه را بروزرسانی کنیم. در اخر کد با نوشتن mySwipe.setRefreshing(false) انیمیشن ایجاد شده را متوقف میکنیم.اگر در جایی از برنامه بخواهیم خاصیت swipe pull down و انیمیشن را غیر فعال کنیم میتوانیم از دستور setEnabled(false) استفاده کنیم.
  5. 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"); } البته این کدی که نوشتم مال تهشه ولی ممکنه تو از چندتا حلقه استفاده کنی
  6. 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 در اندروید انتشار اپلیکیشن در گوگل پلی این دوره توصیه میشود به : اشخاصی كه علاقه مند به آشنایی و كار حرفه ای با اندروید هستند. اشخاصی كه قصد فراگیری كامل طراحی اپلیکیشن های موبایل از ابتدا توسط اندروید دارند. اشخاصی كه قصد راه اندازی اپلیکیشن موبایل شخصی خود توسط اندروید دارند. اشخاصی كه میخواهند با فراگیری حرفه ای شروع به كسب درآمد نموده و به عنوان توسعه دهنده اندروید فعالیت كنند. شركتها و سازمانهایی كه قصد راه اندازی اپلیکیشن موبایل اندروید اختصاصی خود را دارند. دانشجویان رشته های كامپیوتر كه قصد فراگیری كامل توسعه اپلیکیشن های اندروید دارند. اشخاصی كه قصد پیاده سازی ایده های اپلیکیشن های موبایل را در قالب اندروید دارند. اشخاصی كه قصد دارند وب سایت خود را به اپلیکیشن های موبایل اندروید تبدیل كنند. و... ثبت نام دوره اندروید
  7. 2 likes
    public void startProgress() { // do something long Runnable runnable = new Runnable() { @Override public void run() { for (int i = 0; i <= 10; i++) { final int value = i; doFakeWork(); progress.post(new Runnable() { @Override public void run() { } }); } } }; new Thread(runnable).start(); } // Simulating something timeconsuming private void doFakeWork() { SystemClock.sleep(1000);e.printStackTrace(); }
  8. 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 استفاده می شه کاربردی نداره…
  9. 2 likes
    با آمدن ORM‌ها به دنیای برنامه نویسی، کار برنامه نویسی نسبت به قبل ساده‌تر و راحت‌تر شد. عدم استفاده کوئری‌های دستی، پشتیبانی از چند دیتابیس و از همه مهمتر و اصلی‌ترین هدف این ابزار "تنها درگیری با اشیا و مدل شیء گرایی" کار را پیش از پیش آسان‌تر نمود. در این بین به راحتی می‌توان چندین نمونه از این ORM‌ها را نام برد مثل IBatis , Hibernate ,Nhibernate و EF که از معروفترین آن‌ها هستند.من در حال حاضر قصد شروع یک پروژه اندرویدی را دارم و دوست دارم بجای استفاده‌ی از Sqlitehelper، از یک ORM مناسب بهره ببرم که چند سوال برای من پیش می‌آید. آیا ORM ای برای آن تهیه شده است؟ اگر آری چندتا و کدامیک از آن‌ها بهتر هستند؟ شاید در اولین مورد کتابخانه‌ی Hibernate جاوا را نام ببرید؛ ولی توجه به این نکته ضروری است که ما در مورد پلتفرم موبایل و محدودیت‌های آن صحبت می‌کنیم. یک کتابخانه همانند Hibernate مطمئنا برای یک برنامه اندروید چه از نظر حجم نهایی برنامه و چه از نظر حجم بزرگش در اجرا، مشکل زا خواهد بود و وجود وابستگی‌های متعدد و دارا بودن بسیاری از قابلیت‌هایی که اصلا در بانک‌های اطلاعاتی موبایل قابل اجرا نیست، باعث می‌شود این فریمورک انتخاب خوبی برای یک برنامه اندروید نباشد.معیارهای انتخاب یک فریم ورک مناسب برای موبایل: سبک بودن: مهمترین مورد سبک بودن آن است؛ چه از لحاظ اجرای برنامه و چه از لحاظ حجم نهایی برنامه سریع بودن: مطمئنا ORM‌های طراحی شده‌ی موجود، از سرعت خیلی بدی برخوردار نخواهند بود؛ اگر سر زبان هم افتاده باشند. ولی باز هم انتخاب سریع بودن یک ORM، مورد علاقه‌ی بسیاری از ماهاست. یادگیری آسان و کانفیگ راحت تر. greenDAO-master.zip
  10. 2 likes
    Spinner یکی از ویجت های کاربردی و پراستفاده در برنامه های اندرویدی میباشد و بصورت یک منوی بازشونده عمل میکند که میتوانید یک یا چند آیتم را انتخاب کنید. به روش های مختلف میتوانید در Spinner آیتم اضافه کنید مثلا ارایه،xml ،دیتابیس ,..... میتوانید ویجت خود را کنترل نمایید در این تاپیک کلیه روش ها مورد استفاده قرار میگیرند.برای شروع از آرایه استفاده میکنیم 1-لود کردن آرایه در Spinner : ابتدا باید در XML آن را تعریف کنیم: <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Spinner android:id="@+id/spinner1" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout> سپس در اکتیویتی خود باید لیستی را تعریف کرده و در Adapter قرار دهیم: Spinner spinner1 = (Spinner) findViewById(R.id.spinner2); List list = new ArrayList(); list.add("Android"); list.add("BADA"); list.add("Tizen"); ArrayAdapter dataAdapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, list); dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1.setAdapter(dataAdapter);
  11. 1 like
    سلام دلیلی این اتفاق معمولا بخاطر رزولوشن های مختلف دستگاه های اندرویدی هست که برای جلوگیری از این اتفاق معمولا اندازه ها رو روی match_parent یا wrap_content قرار میدن ولی اگر شما قصد دارید که اندازه خاصی برا هر کدوم از رزولوشن های مختلف قرار بدید بهترین کار این هست که dimensionهای مختلف رو برای اونها تنظیم کنید... میتونید با معرفی پوشه های جدید در بخش res این کار رو انجام بدید، به این صورت که چند پوشه تحت عنوان های زیر بسازید: res/values/dimens.xml res/values-small/dimens.xml res/values-normal/dimens.xml res/values-large/dimens.xml res/values-xlarge/dimens.xml و بعد برای dimensها توی پوشه های مختلف مقدار درست رو قرار بدید: //for dimens in values folder <resources> <dimen name="edit_text_width">130dp</dimen> </resources> //for dimens in values-small folder <resources> <dimen name="edit_text_width">80dp</dimen> </resources> ...
  12. 1 like
  13. 1 like
    عذرخواهی میکنم من اشتباه برداشت کرده بودم... وقتی حالت scrollable به fixed تغییر میدید درست میشه یا هنوز مشکل پا برجاست؟
  14. 1 like
    لطفا کد این قسمتو بزارین پس چون با یک عکس نمیشه مشکلو برطرف کرد
  15. 1 like
    دوست من همه ی زبون های توانمند رو خودت حذف کردی چی موند دیگه؟ قفط برای ios برو سمت Swift
  16. 1 like
    سلام من میخوام NDK رو به اندروید استدیو اضافه کنم ولی نمیدنم چطوری اگه میشه راهنمایی کنین ممنون
  17. 1 like
    بهترین راه وب سرویسه دوست عزیز شما یه وب سرویس برای سرورتون بنویس و فقط Requset بفرست و هیچ چیزی رو جز token مربوط به همون گوشی تو حافظه ذخیره نکن البته بعضی ها توکن رو هم ذخیره نمیکنن
  18. 1 like
    [align=center]سلام سال نو مبارک آرشیو کتاب های زبان اصلی برنامه نویسی اندروید Apress , O'REILLY , PACKT , Wrox [align=right] کتاب ها همیشه نقش مهمی در یادگیری دارند به ویژه زمانی که به صورت خودآموز به کار گرفته شوند. در زمینه برنامه نویسی اندروید منابع آموزشی فارسی بسیار کم است و اکثرا به مباحث پایه اندروید پرداخته شده . بنابراین برای یادگیری اصولی و حرفه اندروید نیاز هست از منابع زبان اصلی استفاده شود . سعی میکنم در این صفحه تمامی کتاب های الکترونیکی (PDF) در زمینه اندروید رو جمع آوری کنم تا آرشیو کاملی داشته باشیم. * هر کتابی که مد نظرتان بود به این لیست اضافه شود اعلام کنید. * لینک دانلود مستقیم دراپ باکس به زودی اضافه خواهد شد. [align=center]http://s6.picofile.com/file/8245372250/apress_logo.gif[/img] [align=left]GoogleDrive | DropBox <--Download--| Advanced Android 4 Games GoogleDrive | DropBox <--Download--| Agile Android new GoogleDrive | DropBox <--Download--| Android Application Development for the Intel Platform GoogleDrive | DropBox <--Download--| Android Apps for Absolute Beginners 2nd Edition GoogleDrive | DropBox <--Download--| Android Apps Security GoogleDrive | DropBox <--Download--| Android Apps with Eclipse GoogleDrive | DropBox <--Download--| Android Arcade Game App GoogleDrive | DropBox <--Download--| Android Essentials GoogleDrive | DropBox <--Download--| Android for Work GoogleDrive | DropBox <--Download--| Android Fragments edited GoogleDrive | DropBox <--Download--| Android Game Recipes GoogleDrive | DropBox <--Download--| Android Quick APIs Reference GoogleDrive | DropBox <--Download--| Android Recipes 4th Edition GoogleDrive | DropBox <--Download--| Android Studio New Media Fundamentals new GoogleDrive | DropBox <--Download--| Android TV Apps Development new GoogleDrive | DropBox <--Download--| Beginning Android 2 GoogleDrive | DropBox <--Download--| Beginning Android 3 GoogleDrive | DropBox <--Download--| Beginning Android 3D Game Development GoogleDrive | DropBox <--Download--| Beginning Android 4 Games Development GoogleDrive | DropBox <--Download--| Beginning Android 4 GoogleDrive | DropBox <--Download--| Beginning Android C Game Development GoogleDrive | DropBox <--Download--| Beginning Android Games 2nd Edition GoogleDrive | DropBox <--Download--| Beginning Android Tablet Games Programming GoogleDrive | DropBox <--Download--| Beginning Android Tablet Programming GoogleDrive | DropBox <--Download--| Beginning Android GoogleDrive | DropBox <--Download--| Beginning Android Web Apps Development GoogleDrive | DropBox <--Download--| Decompiling Android GoogleDrive | DropBox <--Download--| Expert Android GoogleDrive | DropBox <--Download--| Genetic Algorithms in Java Basics new GoogleDrive | DropBox <--Download--| GUI Design for Android Apps GoogleDrive | DropBox <--Download--| Introducing SQLite for Mobile Developers new GoogleDrive | DropBox <--Download--| Java Design Patterns new GoogleDrive | DropBox <--Download--| Java Threads and the Concurrency Utilities new GoogleDrive | DropBox <--Download--| Learn Android App Development GoogleDrive | DropBox <--Download--| Learn Android Studio GoogleDrive | DropBox <--Download--| Learn HTML5 and JavaScript for Android GoogleDrive | DropBox <--Download--| Learn Java for Android Development 2nd Edition GoogleDrive | DropBox <--Download--| Learn OpenGL ES GoogleDrive | DropBox <--Download--| Multimobile Development GoogleDrive | DropBox <--Download--| Physics for Game Programmers GoogleDrive | DropBox <--Download--| Practical Android 4 Games Development GoogleDrive | DropBox <--Download--| Practical Android Projects GoogleDrive | DropBox <--Download--| Pro Android 3 GoogleDrive | DropBox <--Download--| Pro Android 4 GoogleDrive | DropBox <--Download--| Pro Android 5 GoogleDrive | DropBox <--Download--| Pro Android Apps Performance Optimization GoogleDrive | DropBox <--Download--| Pro Android Augmented Reality GoogleDrive | DropBox <--Download--| Pro Android C with the NDK GoogleDrive | DropBox <--Download--| Pro Android Flash GoogleDrive | DropBox <--Download--| Pro Android Games 3rd Edition GoogleDrive | DropBox <--Download--| Pro Android Graphics GoogleDrive | DropBox <--Download--| Pro Android Media GoogleDrive | DropBox <--Download--| Pro Android Python with SL4A GoogleDrive | DropBox <--Download--| Pro Android UI GoogleDrive | DropBox <--Download--| Pro Android Wearables GoogleDrive | DropBox <--Download--| Pro Android Web Apps GoogleDrive | DropBox <--Download--| Pro Android Web Game Apps GoogleDrive | DropBox <--Download--| Pro OpenGL ES for Android GoogleDrive | DropBox <--Download--| The Business of Android Apps Development [align=center]http://s6.picofile.com/file/8245372276/o_reilly_logo.png[/img] [align=left]GoogleDrive | DropBox <--Download--| Building Hybrid Android Apps with Java and JavaScript GoogleDrive | DropBox <--Download--| Designing Games GoogleDrive | DropBox <--Download--| Embedded Android GoogleDrive | DropBox <--Download--| Head First Android Development GoogleDrive | DropBox <--Download--| Introducing GitHub GoogleDrive | DropBox <--Download--| Java Cookbook 3rd Edition [align=center]http://s6.picofile.com/file/8245372318/packt_logo.png[/img] [align=left]GoogleDrive | DropBox <--Download--| AndEngine for Android Game Development Cookbook GoogleDrive | DropBox <--Download--| Android 4 New Features for Application Development GoogleDrive | DropBox <--Download--| Android Application Development with Maven GoogleDrive | DropBox <--Download--| Android Application Programming with OpenCV GoogleDrive | DropBox <--Download--| Android for the BeagleBone Black GoogleDrive | DropBox <--Download--| Android Fragmentation Management How-to GoogleDrive | DropBox <--Download--| Android Native Development Kit Cookbook GoogleDrive | DropBox <--Download--| Android NDK GoogleDrive | DropBox <--Download--| Android Studio Application Development GoogleDrive | DropBox <--Download--| Building Android Games with Cocos2d-x GoogleDrive | DropBox <--Download--| Exploring SE for Android GoogleDrive | DropBox <--Download--| Flash Development for Android Cookbook GoogleDrive | DropBox <--Download--| Learning Java by Building Android Games GoogleDrive | DropBox <--Download--| Learning Pentesting for Android Devices GoogleDrive | DropBox <--Download--| Spring for Android Starter GoogleDrive | DropBox <--Download--| Unity Android Game Development by Example [align=center]http://s6.picofile.com/file/8245372334/wrox_logo.jpg[/img] [align=left]GoogleDrive | DropBox <--Download--| Android Application Development Cookbook GoogleDrive | DropBox <--Download--| Beginning Android 4 Application Development GoogleDrive | DropBox <--Download--| Beginning Android Application Development GoogleDrive | DropBox <--Download--| Beginning Android Tablet Application Development GoogleDrive | DropBox <--Download--| Enterprise Android GoogleDrive | DropBox <--Download--| Professional Android 2 Application Development GoogleDrive | DropBox <--Download--| Professional Android 4 Application Development GoogleDrive | DropBox <--Download--| Professional Android Open Accessory Programming with Arduino GoogleDrive | DropBox <--Download--| Professional Android Sensor Programming GoogleDrive | DropBox <--Download--| Professional Android Wearables GoogleDrive | DropBox <--Download--| Professional NFC Application Development for Android [/align] [/align] [/align] [/align] [/align] [/align] [/align] [/align] [/align] [/align]
  19. 1 like
    درواقع شما باید ببینید به چه چیزی نیاز دارید بعضی وقتا این کار جواب میده و بعضی وقتا نه در خصوص اون سوال اولتون هم شما تا جایی که برسید به تهش باید از String هاتون JSONObject بسازید و هدر مورد نظر رو بیرون بکشید که بعد از این کار تمام محتویات داخل همون هدرس، بعد دوباره تبدیل به String میکنید و دوباره هدر بعدی رو بیرون میکشید و همینطور تا آخر
  20. 1 like
    بعضی از دوستان برای انجام onLongClick و onClick در recyclerView دچار مشکل میشن.قصد من در این آموزش انجام این اعمال در recyclerView هستش. برای این کار ابتدا باید یک کلاس جداگانه بنویسیم به صورت زیر: public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener { private OnItemClickListener mListener; private OnItemLongClickListener mLongListener; public interface OnItemClickListener { public void onItemClick(View view, int position); } public interface OnItemLongClickListener { public void onItemClick(View view, int position); } GestureDetector mGestureDetector; public RecyclerItemClickListener(Context context, OnItemClickListener listener) { mListener = listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return true; } }); } public RecyclerItemClickListener(Context context, OnItemLongClickListener listener) { mLongListener = listener; mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { return true; } }); } @Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) { View childView = view.findChildViewUnder(e.getX(), e.getY()); if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) { mListener.onItemClick(childView, view.getChildAdapterPosition(childView)); } return false; } @Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { } @Override public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { } } بعد از اضافه کردن کلاس بالا حالا باید ازش استفاده کنیم به صورت زیر : متد onLongClick: recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getApplicationContext(), attachFileRecyclerView, new RecyclerTouchListener.ClickListener() { @Override public void onClick(View view, int position) { } @Override public void onLongClick(View view, final int position) { . . . } })); متد onClick: recyclerView.addOnItemTouchListener(new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() { @Override public void onItemClick(View view, int position) { . . . } }));
  21. 1 like
    ای وی کتابمنزل های ماتحت میتوانید همی کمک بنماید https://github.com/cachapa/ExpandableLayout https://github.com/AAkira/ExpandableLayout امیدوارم که مفید فایده واقع گردد
  22. 1 like
    این قسمت تجاری ionic هستش و یکسری امکانات خاص در اختیار برنامه نویس قرار میدهد. که میتونید ازش صرفه نظر کنید و ionic را بدین صورت دانلود کنید ابتدا cordova را نصب کنید و بدین صورت نیز ionic را اضافه کنید npm install -g cordova ionic آموزش راه اندازی ionic https://ionicframework.com/getting-started/
  23. 1 like
    با سلام شما به وسیله این پلاگین میتونید گوشی خودتون رو از طریق wifi به اندروید استودیو متصل کنید و برنامه رو روی گوشی تست کنید لینک گیت هاب https://github.com/pedrovgs/AndroidWiFiADB اول باید گوشی به سیستم از طریق کابل یو اس بی به سیستم وصل کنید بعد از اتصال wifi کابل رو جدا کنید
  24. 1 like
    سلام به خاطر اینکه گریدل کامل سینک نشده پیش نمایش غیر فعال هست , فییییلتر شکن و روشن کنید و کتابخونه هارو دانلود کنید.
  25. 1 like
    بسیار سپاس گذارم. واقعا کلی سرچ زدم اصلا نتونستم پیداش کنم. بسیار ممنونم
  26. 1 like
    براتون در انجمن اپلود کردم
  27. 1 like
    این خطای شما بخاطر sdk 26 میباشد که باید دانلود کنید نه build tools
  28. 1 like
    سلام دوستان، در این بحث قراره Firebase Cloud Messaging رو آموزش بدیم. این بار ما درباره (Firebase Cloud Messaging (FCM بحث خواهیم کرد. ما از Firebase برای اضافه کردن cloud messaging در برنامه اندروید استفاده خواهیم کرد. Firebase Cloud Messing چیست؟ Firebase Cloud Messaging یک API قدرتمند است که به شما اجازه می دهد پیام ها را به صورت قابل اعتماد و مستقل از پلتفرمی که در حال توسعه است، ارسال کنید. با استفاده از FCM، توسعه دهندگان می توانند به کاربران اطلاع دهند که داده های جدید برای همگام سازی و ارسال پیام های اطلاع رسانی در دسترس هستند. این برای آزمایش، ارسال پیام های بازاریابی و تعامل بسیار مفید است. نکته : ما می توانیم از Firebase Cloud Message برای ارسال پیام های فوری حداکثر تا 4 کیلوبایت استفاده کنیم. یک پیاده سازی معمول از سیستم Firebase Cloud Messaging شامل یک سرور برنامه است که با FCM با استفاده از پروتکل HTTP یا XMPP و یک برنامه سرویس گیرنده ارتباط برقرار می کند. پیام ها و اعلان ها را می توان به برنامه مشتری با استفاده از سرور برنامه یا کنسول اطلاعیه های Firebase ارسال کرد. در این آموزش ما یک برنامه ساده پیامرسان اندروید firebase ایجاد خواهد کرد که کاربر در مورد firebase android قابلیت ورود به سیستم را ایجاد خواهد کرد. این پست به شما کمک می کند تا با یکپارچه سازی Firebase Cloud Messaging به اندروید کمک کنید. اضافه کردن Firebase Cloud Messaging برای اضافه کردن FCM به برنامه خود ،باید مراحل زیر را دنبال کنید: به Firebase وب سایت firebase.google.com بروید و یک حساب کاربری firebase برای شروع ایجاد کنید. به کنسول Firebase بروید و با کلیک روی دکمه «ایجاد پروژه جدید»، همانطور که در زیر نشان داده شده، یک پروژه جدید ایجاد کنید. نام پروژه و کشور شما را در حال حاضر در آن قرار دهید، پس از اتمام کار روی دکمه «ایجاد پروژه» کلیک کنید. در صفحه بعدی «افزودن Firebase به برنامه Android خود» را انتخاب کنید و سپس جزئیات مانند نام چکیج برنامه - SHA-1 key را وارد کنید. اگر مطمئن نیستید که چگونه اثر SHA-1 را تولید کنید، به این آموزش مراجعه کنید. فایل google-services.json را دانلود کنید. ما آن را بعد به برنامه اندروید خود اضافه خواهیم کرد. پیش نیازهای Firebase Cloud Messaging: Android Studio روی کامپیوتر شما نصب شده (یونیکس یا ویندوز). برای کار با Firebase باید Android Studio 1.5 یا بالاتر نصب کنید.همچنین آخرین سرویس SDK گوگل بازی را از طریق Android SDK Manager دانلود کنید. دستگاه اندرویدی (Smartphone or Tablet) با Android Studio پیکربندی شده باشد. دستگاه اندروید باید از (Android 2.3 (Gingerbread یا جدیدتر و خدمات Google Play 9.2.0 یا جدیدتر استفاده کند. Firebase SDK باید به پروژه اندروید اضافه شود، Firebase Android Tutorial Part 1 - Getting Started افزودن Permissions و Dependencies پس از همگام سازی Gradle این پروژه، فایل google-services.json را به برنامه پروژه اضافه کنید از آنجا که ما نیاز به اتصال به شبکه داریم مجوز اینترنت را در فایل AndroidManifest.xml اضافه می کنیم. همچنین هشدار لرزش را اضافه کنید در هنگام دریافت notification . AndroidManifest.xml <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.VIBRATE"/> همچنین برای خدماتی که FirebaseMessagingService را ارائه می دهد برای مدیریت پیام پس از دریافت اعلان ها در برنامه ها در پس زمینه service هارا اضافه کنید. برای دریافت اعلانها در برنامه این کاملا ضروری است وقتی برنامه فعال نیست notification به کاربر اعلام شود. <service android:name=".MyAndroidFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> اضافه کردن یک ورودی برای یک سرویس که FirebaseInstanceIdService را ارائه می دهد. <service android:name=".MyAndroidFirebaseInstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> همچنین یک ورودی برای یک activity result اضافه کنید، کاربر با کلیک کردن بر روی اعلان به این اکتیویتی بر می گردد. <activity android:name=".ResultActivity"/> در پایان فایل AndroidManifest.xml به صورت زیر خواهد بود: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="https://schemas.android.com/apk/res/android" package="com.androidtutorialpoint.firebasecloudmessagingtutorial"> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.VIBRATE"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".ResultActivity"/> <service android:name=".MyAndroidFirebaseMsgService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <service android:name=".MyAndroidFirebaseInstanceIdService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> </application> </manifest> در حال حاضر در پروژه خود build.gridle را از دایرکتوری اصلی پروژه باز کنید و dependency زیر را اضافه کنید. build.gradle classpath 'com.google.gms:google-services:3.0.0' بعد، build.gridle برنامه خود را باز کنید و در آن مقدار زیر را اضافه کنید. build.gradle apply plugin: 'com.google.gms.google-services' dependency های زیر را در قسمت dependency build.gridle برنامه خود اضافه کنید compile 'com.google.android.gms:play-services:9.2.0' compile 'com.google.firebase:firebase-messaging:9.2.1' اضافه کردن قابلیت ها یک کلاس جدید جاوا MyAndroidFirebaseMsgService ایجاد کنید و کد زیر را اضافه کنید. این کلاس یک سرویس است که FirebaseMessagingService را ارائه می دهد. import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.media.RingtoneManager; import android.net.Uri; import android.support.v4.app.NotificationCompat; import android.util.Log; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; public class MyAndroidFirebaseMsgService extends FirebaseMessagingService { private static final String TAG = "MyAndroidFCMService"; @Override public void onMessageReceived(RemoteMessage remoteMessage) { //Log data to Log Cat Log.d(TAG, "From: " + remoteMessage.getFrom()); Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody()); //create notification createNotification(remoteMessage.getNotification().getBody()); } private void createNotification( String messageBody) { Intent intent = new Intent( this , ResultActivity. class ); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent resultIntent = PendingIntent.getActivity( this , 0, intent, PendingIntent.FLAG_ONE_SHOT); Uri notificationSoundURI = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder mNotificationBuilder = new NotificationCompat.Builder( this) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle("Android Tutorial Point FCM Tutorial") .setContentText(messageBody) .setAutoCancel( true ) .setSound(notificationSoundURI) .setContentIntent(resultIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, mNotificationBuilder.build()); } } در دریافت پیام متد () onMessageReceived صدا زده می شود. ما از NotificationCompat.Builder استفاده می کنیم تا یک اعلان جدید با صدای اطلاع رسانی پیش فرض ایجاد کنیم و نتایج به ResultActivity منتقل می شود. ایجاد کلاس MyAndroidFirebaseInstanceIdService و اضافه کردن کد زیر. این کلاس هم یک سرویس است که FirebaseInstanceIdService را ارائه می دهد.این قسمت اطمینان میدهد که پیام ارسال شده به دستگاه های خاص موفقیت آمیز بوده است. import android.util.Log; import com.google.firebase.iid.FirebaseInstanceId; import com.google.firebase.iid.FirebaseInstanceIdService; public class MyAndroidFirebaseInstanceIdService extends FirebaseInstanceIdService { private static final String TAG = "MyAndroidFCMIIDService"; @Override public void onTokenRefresh() { //Get hold of the registration token String refreshedToken = FirebaseInstanceId.getInstance().getToken(); //Log the token Log.d(TAG, "Refreshed token: " + refreshedToken); } private void sendRegistrationToServer(String token) { //Implement this method if you want to store the token on your server } } در activity_main.xml کد زیر را اضافه کنید. ما تنها یک TextView فقط برای نمایش نام اکتیویتی نیاز داریم. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="https://schemas.android.com/apk/res-auto" xmlns:tools="https://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".MainActivity"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/textView1" android:text="Welcome to Main Activity" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:textStyle="bold" android:layout_marginTop="100dp" android:textAlignment="center" /> </LinearLayout> MainActivity.java package com.androidtutorialpoint.firebasecloudmessagingtutorial; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } یک اکتیویتی جدید به نام ResultActivity.java ایجاد کنید و کد زیر را در آن قرار دهید. import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; public class ResultActivity extends AppCompatActivity { private TextView textView ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView)findViewById(R.id.textView1); textView.setText("Welcome to the Result Activity"); } } ما از اکتیویتی activity_main.xml برای ارسال نتیجه به اکتیویتی (activity result) استفاده میکنیم . این اکتیویتی زمانی صدا زده می شود که کاربر بر روی اعلان دریافت شده کلیک کند. اکنون برنامه کامل شده است، ما با ارسال یک اعلان از پانل اعلان های Firebase، برنامه را تست می کنیم.
  29. 1 like
    امروزه امنیت در تمامی زمینه هایی از اهمیت خاصی برخوردار است. برنامه نویسان اندروید نیز برای ذخیره سازی امن اطلاعات الگوریتم های مختلفی را در برنامه های خود پیاده سازی نمایند.با استفاده از این کتابخانه می توان اطلاعات استفاده شده در برنامه را به امنت ترین شکل ممکن رمزنگاری کرد.این کلاس قابلیت رمزگذاری و رمزگشایی را فراهم می کند. برای رمزگزاری کردن از روش زیر استفاده می کنیم (encryption ) public static byte[] encryptMsg(String message, SecretKey secret) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidParameterSpecException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException { /* Encrypt the message. */ Cipher cipher = null; cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secret); byte[] cipherText = cipher.doFinal(message.getBytes("UTF-8")); return cipherText; } برای رمزگزاری کردن از روش زیر استفاده می کنیم (decryption) public static String decryptMsg(byte[] cipherText, SecretKey secret) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidParameterSpecException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException { /* Decrypt the message, given derived encContentValues and initialization vector. */ Cipher cipher = null; cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secret); String decryptString = new String(cipher.doFinal(cipherText), "UTF-8"); return decryptString; } complete sample: public static SecretKey generateKey() throws NoSuchAlgorithmException, InvalidKeySpecException { return secret = new SecretKeySpec(password.getBytes(), "AES"); } public static byte[] encryptMsg(String message, SecretKey secret) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, InvalidParameterSpecException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException { /* Encrypt the message. */ Cipher cipher = null; cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, secret); byte[] cipherText = cipher.doFinal(message.getBytes("UTF-8")); return cipherText; } public static String decryptMsg(byte[] cipherText, SecretKey secret) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidParameterSpecException, InvalidAlgorithmParameterException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, UnsupportedEncodingException { /* Decrypt the message, given derived encContentValues and initialization vector. */ Cipher cipher = null; cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); cipher.init(Cipher.DECRYPT_MODE, secret); String decryptString = new String(cipher.doFinal(cipherText), "UTF-8"); return decryptString; } To encrypt: SecretKey secret = generateKey(); EncUtil.encryptMsg(String toEncrypt, secret)) password = omid2020 encrypt password = 0abc77ad6c67ddd2590aaeba44451c67d7939875 To decrypt: EncUtil.decryptMsg(byte[] toDecrypt, secret))
  30. 1 like
    ActivityNotFoundException این خطا وقتی رخ میده که برنامه سعی کنه یک اکتیویتی که وجود نداره رو اجرا کنه. معمولا وقتی این خطا پیش میاد که فراموش می کنیم اکتیویتی ساخته شده رو به فایل منیفست اضافه کنیم. ClassCastException وقتی با خطای ClassCastException روبرو میشید، یعنی دارید سعی می کنید روی دو آبجکت که از دو نوع مختلف هستن یک عملیات رو انجام بدید. مثلا وقتی که می خواید یه مقدار عددی رو به یک استرینگ اضافه کنید. برای حل کردن این مشکل کافیه از طریق لوگ، خطی که خطا اونجا رخ داده رو پیدا کنید و متغیر ها رو از یک نوع کنید. Error converting byte to dex اگر به این مشکل بر خوردید، اول پروژه رو clean کنید ( Build > Clean Project ) و سپس اون رو بازسازی کنید ( Build > Rebuild Project ) و اگر همچنان با این مشکل روبرو شدید چک کنید که آیا پکیج هایی که در کلاس هاتون استفاده کردید با اسم پکیج هایی که توی فایل منیفست هستن یکی هستن یا نه. INSTALL_FAILED_INSUFFICIENT_STORAGE این پیغام خطا به معنی این هست که فضای کافی برای اجرای برنامه وجود نداره. اگر از شبیه ساز ها استفاده می کنید میتونید از طریق منوی مدیریت AVD در شبیه ساز مورد نظر فضای بیشتری رو به اون اختصاص بدید و اگر از موبایل واقعی استفاده می کنید بهترین کار پاک کردن برنامه های بی استفاده و پاک کردن کش گوشی هست. NullPointerException شاید معروف ترین خطا در برنامه نویسی جاوا NullPointerException باشه. این مشکل وقتی پیش میاد که یک آبجکت ایجاد شده باشه اما هیچ فضایی در حافضه به اون اختصاص داده نشده باشه (null)، یا به زبان ساده تر یک آبجکت ساخته میشه اما تعریف نمیشه. مثلا کد زیر باعث ایجاد همچین خطایی میشه Object obj; obj.toString(); برای حل کردنش هم باید با استفاده از لوگ، آبجکتی که ساخته شده و تعریف نشده رو پیدا کرد و سپس مقدار دهیش کرد. R.layout.main Cannot Be Found / Cannot resolve symbol R راه حل این خطا هم مثل شماره ی ۳ کلین و بازسازی پروژست. البته گاهی انجام این کار برای یک بار مشکل رو حل نمیکنه. اگر با انجام دادن اونها ( حتی برای چندین بار) مشکل حل نشد بهتر هست کش رو پاکسازی کنید (File > Invalidate Caches / Restart ). اگر باز هم مشکل حل نشد پروژه رو چک کنید که فایل های لی آوت در کلاس ها درست استفاده شدن و در نهایت آخرین کار، ساختن یک پروژه ی جدید و انتقال کد ها به اونجاست. OutofMemoryError معمولا وقتی این خطا رخ میده که برنامه سعی می کنه از مقدار خیلی زیادی حافظه ی رم استفاده کنه. معمولا استفاده از فایل های bitmap با حجم بالا علت این خطا هست و کم کردن حجم اون معمولا مشکل رو حل می کنه. Only the original thread that created a view hierarchy can touch its views وقتی که یک UI رو بخواید از خارج از اون آپدیت کنید با همچین خطایی روبرو می شید. همیشه باید سعی بشه که از این کار پیشگیری کنید اما اگر مجبور هستید این کار رو انجام بدید از runOnUiThread استفاده کنید. Too many field references وقتی برنامه بیشتر از ۶۵۵۳۶ رفرنس داشته باشه این پیغام نشون داده میشه. در اندروید فایل هایی که به اونها dex فایل ها گفته میشه وجود داره که بیشترین تعداد رفرنس ها در هر کدوم از اونها عدد بالا هست. روش بهتر کم کردن تعداد رفرنس هاست اما در موقع نیاز میشه از چند دکس فایل استفاده کرد. NetworkOnMainThreadException وقتی بخواید عملیاتی که مربوط به شبکه هست رو در ترد اصلی استفاده کنید با این پیام روبرو میشید. به طور کلی استفاده از عملیاتی که زمانبر هست توی ترد های اصلی با خطا روبرو میشه و راه حل هم استفاده از AsyncTask هست. Activity has leaked window that was originally added here اگر از دیالوگ ها توی برنامتون استفاده کرده باشید احتمالا با این خطا روبرو شدید. این مشکل وقتی پیش میاد که یک دیالوگ در اکتیویتی ساخته شده باشه اما با از بین رفتن اکتیویتی، اون از بین نره. برای این کار کافی هست در متد onDestroy مربوط به اکتیویتی دیالوگ رو دیسمیس کنید ( dialog.dismiss() )
  31. 1 like
    برای اینکه بتوانید از Context Menu در RecyclerView استفاده کنید . بدین صورت عمل کنید public static class ViewHolder extends RecyclerView.ViewHolder implements OnCreateContextMenuListener { TextView tvTitle; ImageView ivImage; public ViewHolder(View v) { super(v); tvTitle =(TextView)v.findViewById(R.id.item_title); v.setOnCreateContextMenuListener(this); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.setHeaderTitle("Select The Action"); menu.add(0, v.getId(), 0, "Call");//groupId, itemId, order, title menu.add(0, v.getId(), 0, "SMS"); }
  32. 1 like
    سلام دوستان . خسته نباشید . من به تازگی تصمیم به یادگیری اندروید گرفتم ولی خب متاسفانه همین اول را به مشکلی خوردم که درست بشو نیست به زبان انگلیسی هم سرچ کردم ولی جایی جواب درستی نبود . مشکل من اینه که همون اولی که اندروید استودیو رو باز میکنم این ارور میاد Error:Failed to find Build Tools revision 26.0.2 پیر شدم سر این . حالا روش هایی که امتحان کردم هم زیاد بوده ولی جواب نبوده مثلا تو stackoverflow گفته بود که برو تو project structure بعد تو properties و اونجا ورژن build tools رو عوض کن . در صورتی که اصلا در project structure من اصلا properties نیست . یک جای دیگه گفته بود که این خط رو به build.gradle اضافه کن درست میشه buildToolsVersion "24.0.0" اضافه کردم و هیچ عملی نکرد باز هم همون ارور وقتی دیدم راهی نداره گفتم باید این فایل رو دانلود کنم چندین جا گشتم و نبود ولی یک جا پیدا کردم دانلود کردم و extract کردم تو پوشه build tools ولی جوابی نبود و همون ارور میومد . الان راه چیه ؟ اگی فایلی هست که شما میدونین بگین تا دانلود کنم
  33. 1 like
    با سلام من هم مشکل 26.0.2 داشتم با دانلود این گزینه از اینجا حل شد البته اول پوشه android studio در user درایو c رو پاک کردم برای ریست تنظیمات اندروید استودیو و بعدش با قند شکن free گیت خیلی راحت gradel لود شد نسخه android studio v3.0.1 ممنون از دوستان
  34. 1 like
    در این پست آموزشی قصد داریم نحوه تبدیلات تاریخ(شمسی،میلادی) را مورد بررسی قرار دهیم تا بتوانیم این امکان را در پیاده سازی نماییم. برای اینکار یک کلاسی را استفاده میکنیم که مدیر وب سایت kamyarns آن را ایجاد کرده است و قصد داریم در این آموزش نحوه استفاده از این کلاس را آموزش دهیم از طریق لینک زیر نیز میتوانید به کد دسترسی پیدا کنید https://github.com/dc0d/Roozh/blob/master/Java/src/roozh/main/Roozh.java ابتد کد زیر را به عنوان یک کلاس ( Class ) وارد پروژه خود کنید: public class Roozh { private int day, month, year; private int jY, jM, jD; private int gY, gM, gD; private int leap, march; /** * Calculates the Julian Day number (JG2JD) from Gregorian or Julian * calendar dates. This integer number corresponds to the noon of the date * (i.e. 12 hours of Universal Time). The procedure was tested to be good * since 1 March, -100100 (of both the calendars) up to a few millions * (10**6) years into the future. The algorithm is based on D.A. Hatcher, * Q.Jl.R.Astron.Soc. 25(1984), 53-55 slightly modified by me (K.M. * Borkowski, Post.Astron. 25(1987), 275-279). * * @param year * int * @param month * int * @param day * int * @param J1G0 * to be set to 1 for Julian and to 0 for Gregorian calendar * @return Julian Day number */ private int JG2JD(int year, int month, int day, int J1G0) { int jd = (1461 * (year + 4800 + (month - 14) / 12)) / 4 + (367 * (month - 2 - 12 * ((month - 14) / 12))) / 12 - (3 * ((year + 4900 + (month - 14) / 12) / 100)) / 4 + day - 32075; if (J1G0 == 0) jd = jd - (year + 100100 + (month - 8) / 6) / 100 * 3 / 4 + 752; return jd; } /** * Calculates Gregorian and Julian calendar dates from the Julian Day number * (JD) for the period since JD=-34839655 (i.e. the year -100100 of both the * calendars) to some millions (10**6) years ahead of the present. The * algorithm is based on D.A. Hatcher, Q.Jl.R.Astron.Soc. 25(1984), 53-55 * slightly modified by me (K.M. Borkowski, Post.Astron. 25(1987), 275-279). * * @param JD * Julian day number as int * @param J1G0 * to be set to 1 for Julian and to 0 for Gregorian calendar */ private void JD2JG(int JD, int J1G0) { int i, j; j = 4 * JD + 139361631; if (J1G0 == 0) { j = j + (4 * JD + 183187720) / 146097 * 3 / 4 * 4 - 3908; } i = (j % 1461) / 4 * 5 + 308; gD = (i % 153) / 5 + 1; gM = ((i / 153) % 12) + 1; gY = j / 1461 - 100100 + (8 - gM) / 6; } /** * Converts the Julian Day number to a date in the Jalali calendar * * @param JDN * the Julian Day number */ private void JD2Jal(int JDN) { JD2JG(JDN, 0); jY = gY - 621; JalCal(jY); int JDN1F = JG2JD(gY, 3, march, 0); int k = JDN - JDN1F; if (k >= 0) { if (k <= 185) { jM = 1 + k / 31; jD = (k % 31) + 1; return; } else { k = k - 186; } } else { jY = jY - 1; k = k + 179; if (leap == 1) k = k + 1; } jM = 7 + k / 30; jD = (k % 30) + 1; } /** * Converts a date of the Jalali calendar to the Julian Day Number * * @param Jy * Jalali year as int * @param Jm * Jalali month as int * @param Jd * Jalali day as int * @return Julian day number */ private int Jal2JD(int jY, int jM, int jD) { JalCal(jY); int jd = JG2JD(gY, 3, march, 1) + (jM - 1) * 31 - jM / 7 * (jM - 7) + jD - 1; return jd; } /** * This procedure determines if the Jalali (Persian) year is leap (366-day * long) or is the common year (365 days), and finds the day in March * (Gregorian calendar) of the first day of the Jalali year (jY) * * @param jY * Jalali calendar year (-61 to 3177) */ private void JalCal(int jY) { march = 0; leap = 0; int[] breaks = { -61, 9, 38, 199, 426, 686, 756, 818, 1111, 1181, 1210, 1635, 2060, 2097, 2192, 2262, 2324, 2394, 2456, 3178 }; gY = jY + 621; int leapJ = -14; int jp = breaks[0]; int jump = 0; for (int j = 1; j <= 19; j++) { int jm = breaks[j]; jump = jm - jp; if (jY < jm) { int N = jY - jp; leapJ = leapJ + N / 33 * 8 + (N % 33 + 3) / 4; if ((jump % 33) == 4 && (jump - N) == 4) leapJ = leapJ + 1; int leapG = (gY / 4) - (gY / 100 + 1) * 3 / 4 - 150; march = 20 + leapJ - leapG; if ((jump - N) < 6) N = N - jump + (jump + 4) / 33 * 33; leap = ((((N + 1) % 33) - 1) % 4); if (leap == -1) leap = 4; break; } leapJ = leapJ + jump / 33 * 8 + (jump % 33) / 4; jp = jm; } } /** * Modified toString() method that represents date string * * @return Date as String */ @Override public String toString() { return String.format("%04d-%02d-%02d", getYear(), getMonth(), getDay()); } /** * Converts Gregorian date to Persian(Jalali) date * * @param year * int * @param month * int * @param day * int */ public void GregorianToPersian(int year, int month, int day) { int jd = JG2JD(year, month, day, 0); JD2Jal(jd); this.year = jY; this.month = jM; this.day = jD; } /** * Converts Persian(Jalali) date to Gregorian date * * @param year * int * @param month * int * @param day * int */ public void PersianToGregorian(int year, int month, int day) { int jd = Jal2JD(year, month, day); JD2JG(jd, 0); this.year = gY; this.month = gM; this.day = gD; } /** * Get manipulated day * * @return Day as int */ public int getDay() { return day; } /** * Get manipulated month * * @return Month as int */ public int getMonth() { return month; } /** * Get manipulated year * * @return Year as int */ public int getYear() { return year; } } فراخوانی: 1-برای فراخوانی و استفاده از این کلاس کافیست ابتدا از آن یک شی جدید بسازید ، سپس تاریخ ها را وارد نمایید تا خروجی را براساس داده های وارد شده برگرداند. Roozh jCal = new Roozh(); 2- در مرحله بعدی باید تعیین نماییم قصد داریم چه تاریخی را تبدیل نماییم.این کلاس دارای دو تابع بدین صورت میباشد. 1-)تبدیل تاریخ شمسی به میلادی: jCal.PersianToGregorian(Year,Month,Day); 2-)تبدیل تاریخ میلادی به شمسی: jCal.GregorianToPersian(m_year, m_Month, m_day); نکته:مقدار ورودی برای پارامترهای این توابع باید بصورت Int باشد 3-خروجی: برای نمایش و بدست آوردن خروجی از این کلاس کافیست فقط از دستور زیر استفاده کنید: jCal.toString(); convertDB.pdf convertDB.pdf
  35. 1 like
    فرق زیادی نداره فقط vpn نه غیر مجاز سایفون فقط پورت 80 رو تونل میکنه و به لحاظ امنیت و سرعت هم جالب نیست اما vpn کل سیستم رو تونل میکنه و شما از عملکردش اطمینان دارید 80 درصد مشکلات با vpn زدن خودش حل میشه
  36. 1 like
    سلام وقت بخیر خیر نیازی نیست دوستان راهنمایی کردن باید برای هر بخش یک فرگمنت و همراه با tablayout و bttomnavagtion بسازین. فیلم آموزشی در زیر اشاره شده : https://homeandroid.ir/viewpager-and-tablayout موفق باشین.
  37. 1 like
    یه RecyvlerView کلی داره که به بالا و پایین اسکرول میشه باقی موارد به صورت مثلا اسلایدر، RecyvlerView های افقی، و سایر موارد داخلش گنجونده شده
  38. 1 like
    سلام... بجای استفاده از تکست راه بهتر این هست که از DatePicker استفاده کنید که میتونید آموزش اون رو در اینجا مشاهده کنید... برای تبدیل تاریخ ها به هم دیگه میتونید از آموزش زیر استفاده کنید: اگر سوالی بود مطرح کنید تا کدهای کامل رو براتون قرار بدم...
  39. 1 like
    سلام دیجی کلا از یک اسلایدر استفاده کرده که شما می تونید از اینجا فیلم آموزشو ببنید : https://homeandroid.ir/android-slider-image هم چنین از scroll view استفاده کرده و Recyclerview که ایتم های اونو به صورت افقی تنظیم کرده که اینجا بازم می تونید فیلم آموزشیو ببنید : https://homeandroid.ir/jsonarrayrequest-volley موفق باشین.
  40. 1 like
  41. 1 like
    با سلام خدمت همه دوستان، یکی از مشکلاتی که اکثر توسعه دهندگان با آن سر و کار دارند، بالا بردن کارایی یا performance اپلیکیشن می باشد. در این سری از مقالات نگاهی خواهیم انداخت به بالا بردن کارایی در اپلیکیشن های اندرویدی. مشکلی که مدتها با آن دست و پنجه نرم کردم تا اینکه آخر با یافتن کتابی تحت عنوان High Performance Android Apps به نتایج مطلوب رسیدم. مطالبی که در اینجا بیان می شود، ترجمه ای است از این کتاب که به تازگی خواندن آن را به پایان رساندم. با توجه به مطالب ارزشمندی که در این کتاب وجود داشت، تصمیم به ترجمه و ارائه رایگان آن گرفتم. سعی می کنم به صورت مدون و هر 3 روز یکبار (اگر زمان یاری کند) مطالب را به روز رسانی کنم. توجه شما را به قسمت اول این مقاله جلب میکنم. ----------------------------------------------------------------- مقدمه: در حال ساخت یک اپلیکیشن اندرودی هستید ( یا در حال حاضر ساخته اید ). با وجود این، آیا از کارایی اپلیکیشن های خود ناراضی هستید؟ پیدا کردن مشکلات در کارایی یک اپلیکیشن، شغلی است که هیچ وقت کامل نخواهد شد. بر اساس تحقیقاتم، به این قضیه پی بردم که 98% از اپلیکیشن های تست شده قابلیت ارتقاء کارایی را دارا می باشند. هدف این کتاب این است که مشکلات و چاله ها در کارایی موبایل را بهتر درک کنید، همچنین بعضی از ابزارها برای رفع مشکلات در جهت دستیابی به مشکلات اساسی اپلیکیشن شما قبل از ارائه به مشتری را نیز نشان خواهیم داد. مطالعات نشان می دهد که کاربران انتظار دارند اپلیکیشن ها به سرعت بالا بیایند، سرعت پاسخگویی و عکس العمل در مقابل دستورات آنها بالا باشد، و کاملا چشم نواز و زیبا باشند. هر چه اپلیکیشن سریعتر باشد، تعهد و بازدهی کاربر نسبت به آن افزایش پیدا می کند. اپلیکیشن های که بدون توجه به کارایی ساخته می شوند به همان سرعتی که از موبایل پاک خواهند شد، افت می کنند. و یا اپلیکیشن هایی که بدون دلیل باعث مصرف بیش از حد باتری موبایل می شوند. اولین مشکلی که همیشه به آن رجوع می شود نحوه رفع و اصلاح در استفاده بهینه از شارژ باتری در اپلیکیشن است. در چند سال گذشته با هزاران برنامه نویس درباره کارایی اپلیکیشن ها صحبت کرده ام، و فقط تعداد کمی از آنها از وجود ابزارهایی در جهت رفع مشکلات اپلیکیشن آگاهی داشتند. نتیجه کاملا مشخص است: اپلیکیشن هایی که به سرعت و به راحتی اجرا می شوند، بیشتر مورد استفاده قرار می گیرند و در نتیجه درآمد بیشتری برای توسعه دهندگان آنها به همراه خواهد داشت. با توجه به این اطلاعات، جای تعجب دارد که بیشتر توسعه دهندگان اپلیکیشن از این ابزارها در جهت ارتقاء و بهبود کیفیت و کارایی در اپلیکیشن هایشان استفاده نمی کنند. با تمرکز بر این نکته که بالا بردن کارایی چگونه می تواند بر تجربه کاربری تاثیر بگذارد، می توانید ارزش کار کردن و وقت گذاشتن روی بالا بردن کارایی اپلیکیشن را به سرعت مشاهده کنید. این مقاله مختص چه کسانی است! این مقاله حجم وسیعی از اطلاعات با محوریت بالا بردن کارایی در اندروید را شامل می شود. هر کسی که به نوعی درگیر توسعه اپلیکیشن می باشد از تحقیقاتی که در مورد کارایی اپلیکیشن در این مقاله قرار گرفته شگفت زده خواهد شد. توسعه دهندگان اپلیکیشن مطالب و مشکلاتی را در مورد کارایی آن بدست خواهند آورد که فوق العاده سودمند خواهند بود، اما به این نکته باید توجه شود که تمرکز روی این مشکلات فقط مختص سیستم عامل اندروید می باشد. تست کنندگان اپلیکیشن نیز آموزش های تصویری مفیدی را در مورد ابزارهایی در جهت تست کردن کارایی اندروید خواهند یافت. چرا این مقاله را نوشتم! حوزه های رو به رشد بسیار زیادی وجود دارد که توسعه دهندگان وب نکاتی را در مورد اینکه چگونه وبسایت سریعی داشته باشیم در آنها ارائه می دهند. استیو سودرز (Steve Souders) در سال 2007 مطلبی تحت عنوان " وبسایت هایی با کارایی بالا " نوشت که در قالب کتاب، وبلاگ، کنفرانس و... پوشش داده شدند. تا الان، توجه بسیار کمی روی کارایی اپلیکیشن شده است. کندی اپلیکیشن ها می تواند ناشی از سیستم عامل یا سرعت شبکه باشد. شارژ نگه داشتن باتری می تواند ناشی از فقدان سخت افزاری باشد. هر چه تلفن های همراه سریع تر و سیستم عامل های آنها بالغ تر می شوند، کاربران بیشتر پی خواهند برد که اپلیکیشن ها نقشه بسیار اساسی در کارایی تلفن های آنها دارند. ابزار های فوق العاده زیادی برای سنجیدن کارایی اپلیکیشن های اندرویدی وجود دارد، اما تا کنون، لیستی از آنها به طور کلی ارائه نشده است. امیدوارم این کتاب با معرفی ابزارهایی از طرف Google، Qualcomm، AT&T و دیگر شرکت ها یا افراد، قدمی در جهت کشف رازهای کارایی اندروید بردارد و کمک کند که اپلیکیشن شما سریع تر شود تا کاربرانتان را از دست ندهید. مطالب موجود در مقاله: بخش 1 مقدمه ای است بر کارایی اپلیکیشن در موبایل. نکاتی را اجرا خواهیم کرد که تعیین کننده کارایی (performance) در اپلیکیشن شما خواهند بود. چالش های بسیار و همچنین تاثیر کارایی پایین اپلیکیشن در بازار را مورد بررسی قرار داده ام. نکاتی وجود خواهد داشت که با استفاده آنها می توانید مدیریت کار خود را به نحوی انجام دهید که زمان بیشتری را روی بالا بردن سرعت اپلیکیشن بگذارید. اطلاعاتی که در این بخش ارائه می شود برای تمامی پلتفرم ها و دستگاه های موبایلی قابل استفاده هستند. بخش 2 تست کردن را پوشش می دهد. اندروید یک اغیر مجازیستم بسیار عظیم با ده ها هزار دستگاه با UIها، نمایشگرها، نسخه های مختلف سیست عامل و... می باشد. ایده هایی را بررسی خواهم کرد که به شما در تست کردن تعداد زیادی از این دستگاه ها بدون صرف هزینه کمک می کند. فصل 3 به طور کلی به باتری اختصاص داده شده است. چه چیزی شارژ را کم میکند و به چه مقدار اینکار را انجام می دهد. اینکه چگونه کاربران به مشکلات باتری در اپلیکیشن شما پی خواهند برد. همچنین API جدید JobScheduler (که در اندروید نسخه Lollipop ارائه شده) بررسی خواهم کرد که اپلیکیشن هایی را نشان می دهد که بدون دلیل باعث فعال نگه داشتن OS خواهند شد. فصل 4 در مورد کارایی صفحه نمایش خواهد بود. بیشترین هدر رفت انرژی و بخش اصلی اپلیکیشن شما – این همان جایی است که کند بودن اپلیکیشن و کندی پردازش تصویر نمایان می شود. قدم به قدم کارهایی را در جهت بهینه سازی UI با سلسله مراتب منظم انجام خواهیم داد و با استفاده از ابزاری مانند Systrace اپلیکیشن را تست خواهیم کرد. در فصول 5 و 6 نگاهی خواهیم داشت بر مشکلات Memory و CPU که گاهی مانند زباله دان خواهند بود و بررسی خواهیم کرد که چگونه این زباله دان ها روی کارایی اپلیکیشن شما تاثیر می گذارند. تست کردن با ابزارهایی مانند Procstats، MAT و TraceView – که یاد خواهید گرفت چگونه با این ابزارها به عمق اپلیکیشن خود نفوذ کرده و مشکلات اساسی آن را کشف کنید. فصل 7 نگاهی دارد به کارایی شبکه در اپلیکیشن شما. این جایی بود که بررسی کارایی موبایل را شروع کردم و نگاهی خواهیم کرد به جعبه سیاه اپلیکیشن زمانی که با سرور ارتباط بر قرار میکند و اینکه چگونه می توانیم این ارتباط را بهینه سازی کنیم. همچنین نگاهی خواهیم انداخت به چگونگی بررسی کارایی اپلیکیشن در زمانی که شبکه داده ها ضعیف است.(2G و 3G) بخش 8، استفاده از سنجش واقعی کاربر و تحلیل داده ها برای اطمینان از اینکه هر دستگاه تجربه کاربری بهینه خود را دریافت خواهد کرد. همانطور که در بخش 2 گفتیم – هیچ راهی وجود ندارد تا اپلیکیشن را روی تک تک دستگاه ها تست کنیم، اما این به شما بستگی دارد که بخواهید کارایی اپلیکیشن خود را روی دستگاه کاربر بررسی کنید یا خیر. پایان بخش اول (مقدمه) --------------------------------------------------------------------------------------------- - شاهرخ جهان زاده
  42. 1 like
    این کتاب آموزش اندروید شامل مباحث زیر می باشد : مقدمه ای بر برنامه سازی تحت موبایل برای سیستم عامل اندروید نصب محیط برنامه نویسی Android Studio تست اپلیکیشن های اندروید بر روی محیط مجازی (ADV) یا دستگاه واقعی کامپوننت های(اجزای تشکیل دهنده)نرم افزاری یک اپلیکیشن اندروید 1-5-فایل تنظیمات اندروید (manifest) -فایل های محتوا (Resources) مفهوم view در اندروید – المان ها و ابزارک های رابط کاربری یا UI Widget دسترسی به محتوای static و استفاده از آن فرایند آماده سازی، عرضه، توزیع و نصب اپلیکیشن (Deployment) آشنایی با محیط برنامه نویسی Android Studio شروع به استفاده از Android Studio وظایف و task های مربوط به برنامه نویسی Java کار با نرم افزار کنترل نسخه ی Git -نظارت بر مصرف حافظه (Memory Monitor) استفاده از Gradle در محیط برنامه نویسی IntelliJ انتقال پروژه از محیط Eclipse به Android Studio SQLite چیست و چه کاربردی دارد؟ استفاده از File API مروری بر اتصال به اینترنت و دسترسی به منابع از اینترنت در اندروید آموزش RxJava 2.0 استفاده از drag & drop در اندروید Drawable چیست؟ نحوه ی ساخت live wallpaper AppWidgetProvider سرویس های اندروید تعریف سرویس های اختصاصی متصل کردن دوطرفه ی سرویس ها (service binding) هدف از نوشتن تست های نرم افزاری چیست؟ استفاده از Gradle برای کامپایل پروژه های اندرویدی پروژه های کتابخانه ای اندروید و کتابخانه های جاوا مدیریت صدا در محیط اندروید (Android Sound) Cloud to device messaging توابع کتابخانه ای مربوط به تقویم / آموزش Calendar API
  43. 1 like
    بهترین روش برای تجزیه و تحلیل فرگمنت ها استفاده از Arguments در آندروید می باشد.( setArguments ) چند راه برای تجزیه و تحلیل و انتقال اطلاعات به فرگمنت ها در اندروید وجود دارد. با این حال، هنگامی که این کار را انجام می دهید، باید مراقب باشید و در هنگام نمونه برداری و انتقال داده ها به قطعات باید از روش های اشتباه اجتناب کنید. با این حال، این روش اشتباه است. از آنجا که هنگامی که برنامه شما به پس زمینه ارسال می شود و برنامه های دیگر نیاز به حافظه بیشتر و بیشتر دارند، پس برنامه و منابع آن از حافظه پاک می شود تا فضای جدید را باز کند. import android.os.Bundle; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; /** * Sample fragment to demonstrate the instantiation of fragments with arguments * * Created by Günhan on 28.10.2015. */ public class MyFragment extends Fragment { private String name; private int age; private TextView mNameTextView; private TextView mAgeTextView; public static MyFragment newInstance(String name, int age) { Bundle bundle = new Bundle(); bundle.putString("name", name); bundle.putInt("age", age); MyFragment fragment = new MyFragment(); fragment.setArguments(bundle); return fragment; } private void readBundle(Bundle bundle) { if (bundle != null) { name = bundle.getString("name"); age = bundle.getInt("age"); } } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_sample, container, false); mNameTextView = (TextView) view.findViewById(R.id.nameTextView); mAgeTextView = (TextView) view.findViewById(R.id.ageTextView); readBundle(getArguments()); mNameTextView.setText(String.format("Name: %s", name)); mAgeTextView.setText(String.format("Age: %d", age)); return view; } } در این مثال، برای نمایش MyFragment باید از کد زیر استفاده کنید: Fragment fragment = MyFragment.newInstance("OMID", 27);
  44. 1 like
    Android Studio یک محیط برنامه نویسی برای پلتفرم اندروید است. این برنامه در 16 می 2014 توسط مدیران گوگل در کنفرانس گوگل آی/او معرفی شد. از ماه June 2014 نسخه پیش نمایش این برنامه برای امتحان در دسترس توسعه دهنده‌ها قرار گرفت. این محیط بر اساس نرم‌افزار محبوب jetbrains طراحی شده است، این استودیو بطور اختصاصی برای اندروید طراحی شده. هم اکنون این استودیو برای دانلود بر روی ویندوز، مک و لینوکس در دسترس می‌باشد. As a knowledge worker, your choice of tools can mean the difference between struggling and thriving. We’re always searching for tools that increase productivity and automate work. Certain tools have benefits that are so apparent that one adopts them immediately. Android Studio is one such tool. We were introduced to Android Studio just a few days after its prerelease at Google I/O in 2013. Prior to that time, we had both been using Android Developer Tools (ADT) both professionally and in the classroom. ADT is an Android development environment built upon the opensource integrated development environment (IDE) called Eclipse. While Android Studio was still in early prerelease, we both began to use Android Studio professionally. Android Studio is a collaboration between JetBrains and Google. Android Studio is built atop JetBrain’s IntelliJ, and so its functionality is a superset of IntelliJ. Most anything you can do with IntelliJ, you can also do in Android Studio. Android Studio is revolutionary because it streamlines the Android development process and makes Android development far more accessible than it has previously beenviii . Android Studio is now the official IDE for Android دانلود کتاب آموزشی Learn Android Studio learning_android_studio.pdf
  45. 1 like
    کتابخانه تقویم شمسی اندروید Persian Material DateTime Picker ساپورت از ورژن 4 به بالاتر اندروید Material DateTime Picker tries to offer you the date and time pickers as shown in the Material Design spec, with an easy themable API. The library uses the code from the Android frameworks as a base and tweaked it to be as close as possible to Material Design example. دانلود از سرور انجمن اندروید ایران PersianMaterialDateTimePicker-master.zip صفحه رسمی سازنده تقویم شمسی اندروید https://github.com/mojtabadj/PersianMaterialDateTimePicker
  46. 1 like
    سلام در این پست با تجربیات بنده در انتشار برنامه در گوگل پلی همراه باشید ، لطفا اگر سوال یا نظری داشتید از درج پاسخ خودداری فرمایید تا تمام مراحلی را که طی می کنم بصورت قدم به قدم با شما نیز مطرح کنم: از آنجایی که بنده در حال طی مراحل هستم و هنوز برنامه ای منتشر نکردم برای جلوگیری از ضرر مالی تا تکمیل پست کارهایی که انجام دادم را انجام ندهید اگر هم انجام دادید بنده مسولیتی ندارم . همچنین یکی از دلایل اصلی انتشار این تجربیات جلوگیری از ضرر مالی شماست چون انجام این مراحل هزینه دارد .و همچنین ادای دینی که خیلی از دوستان با آموزش هایشان برگردن ما دارند نتیجه چه خواهد شد : حالت اول ) به هدف می رسم و برنامه هایم را منتشر می کنم شما هم می توانید از تجربیات بنده که در این پست می نویسم استفاده کنید. حالت دوم : به نتیجه نمی رسم و حدود دویست هزار تومان ضرر می کنم (فدای سرم (: ) نکته بسیار مهم : مراحل را خودم طی می کنم و نتیجه را اینجا قرار می دهم ویرایش: با این روشی که توضیح دادم مشکلی پیش نیامد و توانستم برنامه را با اکانت شخصی خودم منتشر کنم ، تمام مراحلی که طی کردم را در ادامه آوردم . این پست آموزش انتشار برنامه در گوگل پلی نیست بلکه بیان روش من در انتشار برنامه در زمان تحریم است شاید روش های بهتر و کم هزینه تری باشد .این روش برای انتشار برنامه های رایگان مناسب است و اگر نیاز به انتشار برنامه پولی داشتید برای دریافت درآمد باید حساب بانکی از کشوری که گوگل تایید می کند داشته باشید مثلا در حال حاضر خیلی از کسانی که در ایران حساب و مستر کارت باز می کنند از تاجیکستان است که برای کارهای های گوگلی به کار نمیاید ، اگر قصد تهیه حساب بانکی به منظور دریافت درآمدهای بانکی را داشتید این لیست را ببینید . https://support.google.com/googleplay/android-developer/table/3539140?hl=en موفق باشید /.................................................................................................................................................................................... ویرایش 2: بعد از چند ماه که پیام های ارسال شده کاربران خارجی را دیدیم چند نکته ی خوب متوجه شدم : برنامه ی مفید همه جا طرفدار دارد از آمریکا تا هندوستان و چین و پرتغال و..... چندین ایمیل در خصوص امکان پرداخت مبلغی برای برنامه و حذف تبلیغات بود (نتیجه : برنامه ی مفید قطعا فروش خواهد داشت) آن 20 دلاری که برای باز کردن حساب گوگل پرداخت کرده بودم اکنون از طریق تبلیغات بازگشته است تصویر زیر یک پرداخت از طریق سایت apodeal به حساب webmony من است : متاسفانه ما با عناوین مختلفی تحریم هستیم نمی توانیم براحتی از اقیانوس ماهی بگیریم اگر می توانستیم گوگل پلی برای ما هم جای خوبی بود ! /.................................................................................................................................................................................... مطالب مرتبط : آموزش چند زبانه کردن برنامه ( لینک) بررسی شرایط افزایش دانلود در گوگل پلی (لینک) سایت معتبر تبلغات کلیکی بین المللی + آموزش (لینک) برنامه ای که با این روش در گوگل پلی و چند مارکت خارجی و ایرانی منتشر کردم ، جهت مقایسه تعداد دانلود ها و قدرت مارکت ها و.... می توانید استفاده کنید (لینک) رفع مشکل آدرس ثابت در خارج (لینک) پیام های خصوصی و یک خواهش : دوستان عزیز لطفا از ارسال پیام خصوصی در این مورد خوداری کنید من هرچه کردم اینجا نوشتم اکثر سوالات این بوده : آیا حساب شما مسدود شده : خیر مسدود نشده درامد شما چقدر بوده : دانلود برنامه را از گوگل مشاهده کنید روزانه کمتر از یک دلار درآمد دارد آیا درامدتان را گرفتید : خیر٬ مشغول کار دیگری هستم و سرور را تمدید نکردم لذا مدت هاست به اکانتم لاگین نکردم و اصلا به فکر دریافت درآمد نیستم چون مبلغی نیست که بخوام بگیرم فوقش میشه ۲۰۰ یا ۳۰۰ تومان که ارزش تهیه مستر کارت با مبلغ 1500000 ندارد که به گوگل معرفی کنم و ..... مستر کارت را از کجا گرفتید : اصرار من نکفتن بود چون ولی حالا که اصرار می فرمایید من از سایت http://visa75.com گرفتم سرور از کجا گرفتید : از پشتوار سرور گرفتم می توانید برای ما هم اکانت بسازید هزینه اش را هم می دهم؟ خیر متاسفانه فرصت ندارم در ضمن تمام کارهایی که انجام دادم را نوشتم آیا می تونی برنامه ی من را در گوگل قرار بدی ؟ چون سرور را تمدید نکردم مدت هاست لاگین نکردم لذا نمی توانم این کار را انجام بدهم سپاس و تشکر از شما قدم اول : رفع مشکل تحریم 1- متاسفانه ما تحریم شده ایم برای دور زدن آن باید راه معقولی را انتخاب کنیم تا با قوانین کشور عزیزمان نیز تناقضی نداشته باشد الف : باید در کشور خارجی مورد پشتیبانی گوگل یک رایانه و اینترنت داشته باشیم کامپیوتر های قدرتمندی (سرور) درمحل های امن و مناسب(دیتاسنتر) در کشورهای مختلف نگه داری می شوند می توانیم بخشی از فضای آن را که بوسیله ی نرم افزار مجازی ساز شبیه یک کامپیوتر مستقل شده اند بواسطه یک شرکت اریه دهنده خدمات هاست و سرور که داخل ایران فعالیت می کند اجاره کنیم و رویش سیستم عامل دلخواه خودمان را نصب کنیم و به اینترنت وصل شده و برسیم به سایت گوگل پلی دولپر ! (سرور مجازی یا VPS) * برای این مرحله بنده یک سرور مجازی (vps)با مشخصات زیر از کشور انگلستان اجاره کردم: آی پی ثابت رم: 256 مگابایت پهنای باند نامحدود بر روی پورت 1Gbps سیستم عامل: ویندوز / لینوکس / میکروتیک کانفیگ: تمامی کانفیگ ها رایگان مجازی ساز: KVM-Virtualizor تحویل سرویس: بلافاصله بعد از پرداخت 18,000 تومان ماهانه رویش ویندوز سرور 2003نصب کردم سرعت ریموت نسبتا خوبی دارد (**ویرایش >> سرعتش فقط چند روز اول خوب بود الان کند شده میشه کار کرد ولی کند است برای افزایش سرعت ریموت باید سرور قوی تری گرفت که بتواند ویندوز را بخوبی اجرا کنید سروی که من گرفتم رمش پایین است) تا این مرحله توانستم یک کامپوتر با ip انگستان با هزینه 18000تومان برای هر ماه داشته باشم . *****روش های دیگر برای داشتن آی پی غیر قانونی است لطفا در این تایپیک اصلا مطرح نفرمایید *****استفاده از آپی های مختلف باعث گیر دادن گوگل پلی خواهد شد آی پی سرور باید ثابت باشد سپاس ***نکته برای انتخاب سرور مجازی می توانید از سایت وب هاستیگ کمک بگیرید بنده اطلاعات کافی در این مورد ندارم قدم دوم : عضویت در گوگل پلی از vps ** بر کامپیوتر مجازی که دارم یک مرورگر گوگل کروم نصب کردم چون کار کردن با مرروگر ie در ویندوز سرور دردسر دارد . *** سایت googe play develpoer رفتم https://play.google.com/apps/publish 3- باید یک حساب گوگل جدید داشته باشیم حسابی که قبلا از هیج جایی وارد نشده باشیم یعنی باید الان یکی جدیدش را بسازیم * در مراحل ساخت ایمیل گوگل نام و نام خانوادگی و سن را به میلادی وارد کردم * برای واریفای ایمیل شماره موبایل نیاز هست احتمالا شماره موبایلی که قبلا برای واریفای حساب دیگری بکار برده باشید قبول نخواهد شد برای این مرحله بنده همان شماره موبایل ایران را دادم و یک اس ام اس فرستاد و جیمیل تایید و ساخته شد . ساین اوت شدم و چند ساعت بعد دوباره لاگین کردم هیچ مشکلی بابت شماره تلفن پیش نیامد . قدم سوم پرداخت هزینه 25دلار گوگل پلی دولوپرکار از روی سرور مجازی ) در محله قبل یک اکانت گوگل ساختیم پس عضو گوگل پلی نیز هستیم اما برای انتشار برنامه ها باید بعنوان یک توسعه دهنده در آن ثبت نام کنیم در حال حاضر گوگل برای ثبت نام developer مبلغ 25دلار هزینه دریافت می کند . ** تهیه مستر /ویزا کارت : برای پرداخت باید یک مستر کارت یا ویزا کارت که قبلا از طریق آن این حق عضویت پرداخت نشده باشد داشته باشیم یعنی الان من چون این هزینه را پرداخت کردم دیگر نمی توانم از کارتم برای پرداخت این مبلغ استفاده کنم . یک مستر کارتمجازی 30 دلاری صادره از محلی که سرور قرار دارد تهیه کردم (25 دلار کافی است)این کارت یکبار مصرف است و قابلیت شارژمجدد ندارد (با گیفت کارت گوگل اشتباه نگیرید احتمالا پرداخت با گیفت کارت امکان پذیر نیست البته احتمالا) جستجوکنید فروشندگان زیادی هستند بنا به دلایلی اسم فروشنده و سایتش را اعلام نمی کنم.آنها اطلاعات کارت را برایم ایمیل کردند هزینه کارت 30 دلاری از کشور انگلستان شد 159هزار تومان . توجه داشته باشید اگر ارز داخل مستر کارت دلار نیست مثلا درهم و... است ممکن است موقع پرداخت برای تبدیل به دلار مقداری از آن کم کنند که در این صورت اگر مبلغ خالص به 25دلار نرسد کارتتان قابلیت استفاده برای پرداخت را نخواهد داشت چون قابل شارژ نیست. ***پرداخت مبلغ از طریق کارت : وارد سایت https://play.google.com/apps/publish می شویم و با مشخصات کارتی که داریم مبلغ حق عضویت را پرداخت می کنیم . اگر با روش پرداخت مشکل دارید می توانید آموزش ساخت گوگل پلی دولپر را در گوگل جستجو کنید ویدیوهای زیادی هست . *** در این مرحله من حق عضویت گوگل را پرداخت کردم و به صفحه تکمیل مشخصات که اسم توسعه دهنده ایمیل و آدرس شماره تلفن می خواست را وارد کردم من برای شماره تلفن 0919 ایران (همان که برای ایمیل وارد کردم ) و آدرس بیلدینک مستر کارت را وارد کردم الان کجا هستم ؟ یک پیام از گوگل با این مضومن دریافت کردم [align=center]Your payment is still processing, which will take up to 48 hours.You can already start to upload APKs and prepare Store listings but not publish any applications yet.We will notify you when the payment went through and you can publish your applications.[/align] "پرداخت شما در حال پردازش هست و تا 48 ساعت زمان خواهد برد . در حال حاضر می توانید برنامه های خودتان را آپلود کنید و در آماده ی انتشار قرار بدهید اما فعلا نمی توانید آنها را ممنتشر کنید وقتی پرداخت تایید شد به شما اطلاع خواهیم داد " راستش فکر کردم قبول نشده و 160 تومان و سرور مجازی بلا استفاده خواهد ماند اما وقتی جستجو کردم دیدم این موضوع انگار عادی هست و بعد از 48 ساعت تایید میشه http://madetoday-athens.blogspot.com/2015/01/how-to-create-google-play-developer.html. خب امروز تا این مرحله رفتم و منتظر هستم ببینم بالاخره گوگل چه تصمیمی می گیرد آیا پرداخت من را تایید خواهد کرد و یا تمام کارها و هزینه هایی که کردم به هدر خواهد رفت . نتیجه هر چه باشد پس از 48 ساعت در این تایپیک به اطلاع خواهم رساند اگر تایید شد قدم ها را ادامه می دهیم اگر هم نشد شما اشتباه من را انجام ندهید شاد باشد تا آن موقع برایم "« أَمَّنْ يُجيبُ الْمُضْطَرَّ إِذا دَعاهُ وَ يَكْشِفُ السُّوءَ " بخوانید. (: ویرایش : بدون اینکه از گوگل پیامی دریافت کنم امکان انتشار برنامه برایم فعال شد . و برنامه ای را منتشر کردم جمع بندی : برای ساخت اکانت گوگل پلی و انتشار برنامه در آن مراحل بالا را طی کردم و توانستم برنامه رایگانی را منتشر کنم 1- برای ساخت اکانت یک vps (سرور مجازی) از انگلستان گرفتم ,و رویش ویندوز نصب کردم از کامپیوتر خودم به سرور مجازی ریموت دسکتاپ زدم و تمامی مراحل عضویت در گوگل و انتشار برنامه را از طریق سرور مجازی انجام دادم. 2- از روی سرور مجازی عضو گوگل پلی شدم کشور را انگلستان (محل سرور) و برای شماره تلفن شماره ایران را وارد کردم هیچ مشکلی پیش نیامد 3- یک مستر کارت مجازی 30دلاری خریدم و هزینه ی 25 دلاری گوگل پلی را پرداخت کردم . 4- بعد از دو سه روز یک برنامه رایگان در گوگل پلی منتشر کردم . هزینه ها : 1- هزینه سرور مجازی 18000 تومان ماهانه 2- هزینه خرید مستر کارت مجازی 159000 تومان البته هنوز 5 دلارش در حسابم است . 3- خرید دامین .com سالانه 35000 تومان به استفاده برای پشتیبانی برنامه (اختیاری) **** داستان برنامه پولی و رایگان**** روش انتشار برنامه پولی دقیقا مثل برنامه رایگان است فقط برای برنامه های پولی فیلد قیمت را هم پر می کنید (مثل بازار) در انتشار برنامه پولی هیچ مشکلی نیست مشکل در دریافت درآمد از گوگل است برای دریافت درامد از گوگل باید یک مستر کارت ویزا کارت دبیت( متصل به حساب )در یکی از بانک های کشورهای مورد پشتیبانی گوگل و همچنین مدارک اثبات محل سکونت (شامل قبض برق و آب _ و مدارک اثبات هویت گواهینامه یا پاسپورت کارت شناسی کشوری که حساب به نامش باز کردید) هزینه ی صدور مستر/ویزا کارت دبیت در ایران حدود یک میلیون و هشتصد هزار تومان است . از آنجایی که بازار گوگل با مارکت های دیگر خیلی فرق دارد بهتر است قبل از هزینه کردن زیاد چند نرم افزار رایگان منتشر کنیم تا اگر دنلود نشد بعدا مایوس نشویم . پیشنهاد بهتر استفاده از تبلیغات در برنامه رایگان است سایت های زیادی هستند که دوستان در این انجمن مطرح کرده اند حالا اگر درآمد به 1800رسید می توان صرف باز کردن حساب ارزی و دریافت مستر کارت دبیت کرد . خدا را چی دیدی شاید تا ان موقع تحریم ها هم رفت کنار ممنون از حوصله ای که به خرج دادید موفق و موید باشید . کسب درامد : پس از انتشار نوبت کسب درامد است ٬ ما در اینجا روشی را معرفی کردیم که بدون نیاز به حساب ارزی و مشکلات تحریم بانکی از Admob و چند شبکه تبلیغات دیگر کسب درامد کنیم ٬ در این روش تبلیغات admob و6 شبکه تبلیغات دیگر را در نرم افزار خواهید داشت اما بایک سایت طرف حساب هستید که پرداختش با وبمانی و..... است و هر موقع می توان درخواست پرداخت داد.هم برای نمایش و هم برای کلیک پرداخت دارد والبته تحریم را جدی نگرفته. توضیحات بیشتر در این مورد را در مطلب زیر نوشته ایم : نکته مهم : پرداخت درآمد آگهی های نمایش داده شده از admob با خود admob است این سایت تنها درآمد 6 شبکه دیگر را که در مطلب زیر توضیح داده بطور مستقیم پرداخت می کند . http://p30droid.com/Thread-%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%82%D8%AF%D9%85-%D8%A8%D9%87-%D9%82%D8%AF%D9%85-%DA%A9%D8%B3%D8%A8-%D8%AF%D8%B1%D8%A2%D9%85%D8%AF-%D8%A7%D8%B2-%DA%AF%D9%88%DA%AF%D9%84-%D8%A8%D9%87-%D8%B1%D9%88%D8%B4-%D8%AA%D8%A8%D9%84%DB%8C%D8%BA%D8%A7%D8%AA-%D8%BA%DB%8C%D8%B1-%D9%85%D8%B3%D8%AA%D9%82%DB%8C%D9%85
  47. 1 like
    بیشتر ما در این روزگار دارای یک گوشی هستیم و میتوانیم پیامک ارسال نمایید.حال اگر بخوایم اپلیکیشنی بنویسیم که از آن طریق SMS بفرستیم باید چیکار کنیم. برای اینکار در اندروید SmsManager برای اینکار قرار داده شده است. در این آموزش قصد داریم یک SMS را بصورت متنی ساده به شماره مورد نظر ارسال نماییم روال کار بدین صورت است دو EditeText داریم ، یکی برای شماره و یکی هم برای متن فایل main.xml <?xml version="1.0" encoding="utf-8"?> android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > android:id="@+id/textViewPhoneNo" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dip" android:text="Enter Phone Number : " android:textAppearance="?android:attr/textAppearanceLarge" /> android:id="@+id/editTextPhoneNo" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dip" android:phoneNumber="true" > android:id="@+id/textViewSMS" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dip" android:text="Enter SMS Message : " android:textAppearance="?android:attr/textAppearanceLarge" /> android:id="@+id/editTextSMS" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dip" android:gravity="top" android:inputType="textMultiLine" android:lines="5" /> android:id="@+id/buttonSend" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margin="5dip" android:text="Send" /> چیز خاص دیگه ای در xml نیستش که احتیاج به توضیح باشه خب..... در اکتیویتی create.java : txt_number = (EditText) findViewById(R.id.editTextPhoneNo); txt_text = (EditText) findViewById(R.id.editTextSMS); btn_send = (Button) findViewById(R.id.buttonSend); btn_send.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub String phoneNo = txt_number.getText().toString(); String sms = txt_text.getText().toString(); try { SmsManager smsmanager = SmsManager.getDefault(); smsmanager.sendTextMessage(phoneNo, null, sms, null, null); Toast.makeText(getApplicationContext(), "SMS Sent", 1) .show(); } catch (Exception e) { // TODO: handle exception Toast.makeText(getApplicationContext(), "SMS faild, please try again later!", Toast.LENGTH_LONG).show(); e.printStackTrace(); } } }); در این فایل فقط این دو خط : SmsManager smsmanager = SmsManager.getDefault(); smsmanager.sendTextMessage(phoneNo, null, sms, null, null ); مربوط به ارسال پیامک میباشد تا متن را به شماره مقصد بفرستد
  48. 1 like
    به صورت اتفاقی این سایت رو دیدم که خدمات ارسال پیام به صورت وب سرویس در اختیار کاربران قرار می دهد البته رایگان نیست! http://www.payam-resan.com/CMS/
  49. 1 like
    غیر از وب سرویس روش دیگه ای هم وجود داره که شرط و شروطی داره و جالب نیست! استفاده از برنامه های مانندwhatsapp و یا غیره یعنی در برنامه خودتون از intent این برنامه ها برای ارسال پیام استفاده کنید و شرطش اینه که برنامه مزبور حتما intent مورد نظر رو برای عموم جهت استفاده و ارسال پیام مهیا کرده باشه و شرط دوم برنامه شما حتما باید در کنار این برنامه اجرا بشه و اگه نباشه که دیگه ارسال پیامی نداره! در سایت stackoverflow بروبچ یه سری کد ها نوشتن من خودم تست نکردم اگه خواستی تست کن ببین جواب میده! برای حالت وب سرویس هم باید یک سرور وجود داشته باشه ( حال اون شرکت یا سازمان این سرور رو تهیه کنه و دیوایس ارسال پیام هم یا اینکه سروری وجود داشته باشه که وب سرویس ارسال پیام را در اختیار دیگران قرار بده پولی یا رایگان) و کد های مربوط به وب سرویس باید با توجه به API موجود در سرور نوشته بشه!
  50. 1 like
    برای ارسال پیام یا هر عمل دیگه از طریق اینترنت نیاز به وب سرویس های مورد نظر دارید!