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

  1. Farzad Sarseifi

    Farzad Sarseifi

    مدیریت انجمن


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

      284

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

      1,982


  2. a.khosroabadi

    a.khosroabadi

    مدیر انجمن


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

      87

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

      193


  3. Omid Zakeri

    Omid Zakeri

    مدیر انجمن


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

      59

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

      105


  4. Seven7up

    Seven7up

    مدیر انجمن


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

      41

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

      110



Popular Content

Showing most liked content since ۱۳/۰۳/۱۲ in all areas

  1. 8 likes

    نگارش 1.0.0

    811 دانلود

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

    رایگان

  2. 6 likes

    نگارش 1.0.0

    179 دانلود

    سورس اپلیکیشن whatsApp یک اپلیکیشن چت و سورس باز که بصورت رایگان در اختیار کاربران انجمن اندروید ایران قرار گرفته است. دانلود سورس اپلیکیشن واتزاپ Whatschat- Whatsapp clone نسخه 1.0 Real time chat functionality Whatsapp feel Add Friends User Profile and Status User online and offline system Create Group and add friends to group Chat in group Chat with friends Login and Registration System

    رایگان

  3. 4 likes
    آره والا دست این گوگل درد نکنه که همه جوره راحتمون کرده
  4. 3 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); امید وارم آموزش مفیدی برای شما باشه من الله التوفیق
  5. 3 likes

    نگارش 1.0.0

    153 دانلود

    ایا به سورس اپلیکیشن اندرویدی نیاز دارید که بتوانید یک Music Player قوی پخش فایل های صوتی را داشته باشید،با این پروژه اندرویدی میتوانید اینکار را انجام دهید. ویژگی های این پروژه اندرویدی : پخش فایل صوتی از طریق حافظه داخلی استریم فایل ها صوتی از طریق اینترنت پخش فایل های صوتی با فرمت های MP3, AMR, AAC, PCM WAV, OGG, MP4a, 3GP

    رایگان

  6. 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" />
  7. 3 likes
    سلام حتما از اسم موضوع تعجب کردید ! ولی باید بگم چاقوی کره خوری یه کتاب خونه هست واسه برنامه نویسی اندروید که یه قسمتی رو که حتما تا حالا خستتون کرده رو تفاوت توش ایجاد کرده FindViewById حتما این قسمت میدونید دیگه واسه تعریف ویجت هاست در کد Java حالا با این کتابخونه ما این قسمتو توش تغییر ایجاد میکنیم دیگه جا نوشتن FindViewById مینویسیم @BindView(R.id.user) EditText username; خوب حالا بریم سراغ آموزش اول این کتابخونه رو اضافه کنید به پروژتون dependencies { compile 'com.jakewharton:butterknife:8.4.0' annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' } حالا سینک کنید پروژه رو و برید یه ویجت بذارید تو فایل XML بیاید تو کد جاوا و مثلا اینو بنویسید در زیر کلاس اصلیتون(توی توابع ننویسید.جایی بذارید همه جا در دسترس باشه) که کد در کل به این حالت در بیاد class ExampleActivity extends Activity { @BindView(R.id.user) EditText username; @BindView(R.id.pass) EditText password; @BindString(R.string.login_error) String loginErrorMessage; @OnClick(R.id.submit) void submit() { // TODO call server... } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.simple_activity); ButterKnife.bind(this); // TODO Use fields... } } توجه کنید کد ButterKnife.bind(this); فراموش نشه که بذاریدش تو تابع onCreate دوستان لینک کامل آموزش خودشم اینجاس ببخشید یکم سر سری توضیح دادم ---------------------
  8. 3 likes
    با سلام 54 مگ گذاشتین برای دانلود ولی هنگام extract کردن faild میده !!!!
  9. 3 likes
    یک کلاس ایجاد کنید برای اینکه بتوانید روی EditTextکاری کنید فقط یبار دات لود شود : public class DecimalTextWatcher implements TextWatcher { private NumberFormat numberFormat = NumberFormat.getNumberInstance(); private EditText editText; private String temp = ""; private int moveCaretTo; private int integerConstraint; private int fractionConstraint; private int maxLength; /** * Add a text watcher to Edit text for decimal formats * * @param editText * EditText to add DecimalTextWatcher * @param before * digits before decimal point * @param after * digits after decimal point */ public DecimalTextWatcher(EditText editText, int before, int after) { this.editText = editText; this.integerConstraint = before; this.fractionConstraint = after; this.maxLength = before + after + 1; numberFormat.setMaximumIntegerDigits(integerConstraint); numberFormat.setMaximumFractionDigits(fractionConstraint); numberFormat.setRoundingMode(RoundingMode.DOWN); numberFormat.setGroupingUsed(false); } private int countOccurrences(String str, char c) { int count = 0; for (int i = 0; i < str.length(); i++) { if (str.charAt(i) == c) { count++; } } return count; } @Override public void afterTextChanged(Editable s) { // remove to prevent StackOverFlowException editText.removeTextChangedListener(this); String ss = s.toString(); int len = ss.length(); int dots = countOccurrences(ss, '.'); boolean shouldParse = dots <= 1 && (dots == 0 ? len != (integerConstraint + 1) : len < (maxLength + 1)); boolean x = false; if (dots == 1) { int indexOf = ss.indexOf('.'); try { if (ss.charAt(indexOf + 1) == '0') { shouldParse = false; x = true; if (ss.substring(indexOf).length() > 2) { shouldParse = true; x = false; } } } catch (Exception ex) { } } if (shouldParse) { if (len > 1 && ss.lastIndexOf(".") != len - 1) { try { Double d = Double.parseDouble(ss); if (d != null) { editText.setText(numberFormat.format(d)); } } catch (NumberFormatException e) { } } } else { if (x) { editText.setText(ss); } else { editText.setText(temp); } } editText.addTextChangedListener(this); // reset listener // tried to fix caret positioning after key type: if (editText.getText().toString().length() > 0) { if (dots == 0 && len >= integerConstraint && moveCaretTo > integerConstraint) { moveCaretTo = integerConstraint; } else if (dots > 0 && len >= (maxLength) && moveCaretTo > (maxLength)) { moveCaretTo = maxLength; } try { editText.setSelection(editText.getText().toString().length()); // et.setSelection(moveCaretTo); <- almost had it :)) } catch (Exception e) { } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { moveCaretTo = editText.getSelectionEnd(); temp = s.toString(); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { int length = editText.getText().toString().length(); if (length > 0) { moveCaretTo = start + count - before; } } } فراخوانی : itemCostEditText.addTextChangedListener(new DecimalTextWatcher(itemCostEditText, 6, 2));
  10. 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();
  11. 2 likes
    سلام این آموزش رو مطالعه کنید: http://mrbool.com/how-to-change-the-layout-theme-of-an-android-application/25837
  12. 2 likes
    کاتلین چیست ؟ کاتلین یک زبان برنامه نویسی تایپ اسکریتی میباشد برای ماشین مجازی JVM که اندروید ومروگر های بطوررسمی توسط گوگل برای اندروید پشتیبانی میشود. زبان برنامه نویسی کاتلین توسط شرکت Jetbrain توسعه داده شده است .شرکت Jetbrain ایجاد کننده Intellij idea میباشد ،اندروید استودیو نیز براساس Intellij میباشد .در مراسم گوگل i/o 2017 گوگل بطور رسمی کاتلین را زبان رسمی توسعه اندروید بنا نهاد. چرا کاتلین : با استفاده از زبان کاتلین کدهای کمتری خواهید نوشت و با عملیات های بسیار بالا.در جاوا. اگر شما میخواهید یک data کلاس ایجاد کنید مدت زمان زیادی را باید صرف ساخت members و getter و setter ها کنید،اما در کاتلین شما میتوانید اینکار را با کدهای خیلی کمتری انجام دهید data class Person( var id : Long, var name:String, var age: Int) همچنین یک نکته خوب دیگه : Null safe در زبان برنامه نویسی جاوا هنگام کد نویسی با مقدار Null pointer exception زیاد روبه روبه میشوید.اما بااستفاده از زبان برنامه نویسی کاتلین خطای Null pointer exception هیچوقت رخ نخواهد داد چگونه میتوانیم از کاتلین استفاده کنیم ؟ از اندروید استودیو 3.0 کاتلین بطور کامل پشتیبانی میشود. در ورژن های حال حاضر میتوانید پلاگی کاتلین را نصب کنید و از زبان برنامه نویسی کاتلین استفاده کنید.
  13. 2 likes
    برای پیاده سازی اینکار باید در فایل مانیفست تگ زیر را اضافه کنید تا در صورتی کاربر در بخش Brower ها اپ شما را انتخاب کرد اطلاعات برای شما ارسال شود <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="example.com" android:pathPrefix="/someresource/" android:scheme="http" /> <data android:host="www.example.com" android:pathPrefix="/someresource/" android:scheme="http" /> </intent-filter> Here, scheme -> Protocol of particular site host-> Exact site url with WWW pathprefix - > Your site's sub path if available Now,
  14. 2 likes
    سلام... حتما تا حالا شده که گوشیتون رو جایی جا بذارید یا توی خونه گمش کرده باشید... یکی از مزیتهایی که در گوگل وجود داره این هست که میتونید با استفاده از لینک زیر محل تقریبی گوشی رو پیدا کنید: www.google.com/android/find خیلی راحت وارد اکانت gmail بشید و با طی کردن مراحل به سادگی میتونید محل گوشی رو پیدا کنید... علاوه بر اون گزینه هایی مثل به صدا در آوردن یک آهنگ حتی در حالتی که گوشی روی حالت سایلنت هست در اون وجود داره...
  15. 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; } }
  16. 2 likes
    کاربران گرامی انجمن اندروید ایران همانطور که مطلع هستید در تاریخ 19 آذر ماه 1395 ورژن جدید انجمن اندروید ایران ایجاد شده و دارای بخش های فراوانی همچون : مارکت اندروید چت رابط کاربری جذاب راحتی کار در موبایل آپلود سنتر داخلی برای بارگذاری فایل ها و... خوشحال خواهیم شد نظرات خود را با ما در میان بگذارید تا بتوانیم وب سایت بهتری در شان انجمن اندروید ایران را در اختیار کاربران قرار دهیم. با تشکر فرزاد سرسیفی
  17. 2 likes
    نه ربطی به این موضوع نداره شما تو تنظیمات اپلیکیشن مشخص مینید که حداقل ورژن اندروید(minSdk) که ساپورت میکنه چند باشه
  18. 2 likes
    برای بهتر متوجه شدن Annotation ها در اندروید باید اول با مفهومی به اسم فراداده یا Metadata آشنا بشیم. فرا داده، به داده هایی گفته میشه که در مورد داده های دیگه به ما اطلاعاتی رو میدن. برای اینکه بتونیم از انوتیشن ها استفاده کنیم کافیه کد زیر رو توی فایل gradle پروژه قرار بدیم: compile 'com.android.support:support-annotations:<latest-library-version>' چند انوتیشن پر کاربرد در اندروید Nullness Annotations / انوتیشن تهی بودن Resource Annotations / انوتیشن های مربوط به منابع Thread Annotations / انوتیشن های مربوط به Thread Value Constraints Annotations / انوتیشن های مربوط به اجازه دهی (دسترسی) انوتیشن تهی بودن دو انوتیشن @Nullable و @NonNull برای چک کردن تهی بودن یک مقدار و یا پارامتر استفاده میشن. @Nullable : نشون دهنه ی مقدار و یا پارامتری هست که میتونه مقدار تهی رو بپذیره. @NonNull : این انوتیشن برعکس قبلیش هست و برای چک کردن مقادیری که نمی تونن تهی باشن استفاده میشه. //pass a null argument to a method annotated as @NonNull doubleNumber(null); public int doubleNumber(@NonNull int num) { return num * 2; } و برای صدا زدن این متد int number=doubleNumber(number); انوتیشن های مربوط به منابع توی اندروید منابع (Resource) مختلفی مثل drawable, integer,String وجود داره و با استفاده از انوتیشن ها می تونیم نوع این منابع رو، برای اطمینان از درست بودن مقدار، در هنگام پاس دادن چک کنیم. public void setButtonText(@StringRes int id) { //set text on some button } //this will be flagged by the IDE setButtonText(R.drawable.icon); انوتیشن های مربوط به Thread این نوع انوتیشن ها چک می کنن که یک متد در داخل یک نوع ترد خاص صدا زده بشه. که شامل انوتیشین های زیر می باشد: @UiThread @MainThread @WorkerThread @BinderThread @WorkerThread protected abstract Result doInBackground(Params... params); @MainThread protected void onProgressUpdate(Progress... values) { } مثلا اگر از انوتیشن MainThread برای یک متد استفاده کنیم، در صورتی که بخوایم اون متد رو در تردی به جز ترد اصلی صدا بزنیم با یک اخطار روبرو میشیم. انوتیشن های مربوط به اجازه دهی (دسترسی) با استفاده از انوتیشن @RequiresPermission می تونیم از اینکه متد ما دسترسی خاصی (مثلا اجازه ی استفاده از دوربین) رو داره اطمینان حاصل کرد. public void setAlpha(@IntRange(from=0, to=255) int alpha) { //set alpha } تضمین می کند که مقدار پارامتر آلفا بین 0 تا 255 می باشد..
  19. 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; } }
  20. 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();
  21. 2 likes
    سلام متاسفانه اون قسمتی که احتیاج داشتم نزاشتین یا اینکه اگه امکان داره تو کلاس اکتیویتی تون ببینین خط 100 چه کدی داره؟ خط 100 MainActivity یه ابجکت دارین که Null هستش
  22. 2 likes
    خواهش میکنم زمانی که احتیاج باشه یک فایل رو جا به جا کنید مثلا تصمیم دارین جای یک عکس رو تغییر بدین باید این دسترسی رو داشته باشه برنامتون.
  23. 2 likes
    فرض کنید شما یه برنامه نوشتید مثلا یه برنامه مدیریت sms تصمیم دارین وقتی یک پیغام جدید میاد به صورت popup یا یه دیالوگ نشون بدین اینو. حالا ممکنه کاربر مثلا داره تو اینترنت جستجو میکنه ، و یه پیغام میاد براش این پنجره شما به صورت popup روی اون برنامه میخواهید باز بشه باید این permission رو ست کنید. کلا زمانی که تصمیم داشته باشید پنجره برنامه شما روی همه برنامه های دیگه باز بشه باید این دسترسی داشته باشه.
  24. 2 likes
    کاربران گرامی انجمن اندروید ایران با درود همانند روال سال های گذشته ، انجمن برنامه نویسی پی سی دروید اقدام به انتشار هدایای نوروزی نموده است ، امیدواریم هدایای این دوره عیدی خوبی برای کاربران گرامی انجمن باشد.پس در نوروز کنار ما باشید با تشکر انجمن اندروید ایران
  25. 2 likes
    کاربران گرامی انجمن برنامه نویسی اندروید پی سی دروید با درود چهار سالگی انجمن برنامه نویسی اندروید پی سی دروید مبارک باد همچنان که در طی سالیان گذشته در کنار ما بودید مبنی بر اینکه در روز 22 اسفند ماه که برابر است با چهار سالگی انجمن برنامه نویسی اندروید ، به پاس این روز نیک قصد داریم هدایایی را تقدیم کاربران انجمن پی سی دروید نماییم ،از این رو خوشحال میشویم شما در این روز با ما همراه باشید. خوشحال خواهیم نظرات خود را در مورد انجمن اندروید ایران با ما در میان بگذارید تا بتوانیم در سال جدید(۱۳۹۶) انجمنی پربارتر را داشته باشیم با احترام مدیر انجمن اندروید ایران (پی سی دروید) فرزاد سرسیفی
  26. 2 likes
    سلام دوست عزیز احتیاجی به متغییر نیست.دلیل این اتفاق این هستش که زمانی که شما بین تب ها جا به جا میشین فرگمنت ها به صورت کامل از بین نمیرن. برای این که شما جلو این تکرار رو بگیرین باید تو متد onCreateView یه شرط بزارین قبل از ساخت adapter تا چک کنید ببینید ازین فرگمنت دیتایی ساخته شده یا نه به این صورت تغییر بدین کدتونو if (savedInstanceState == null){ adapterCardView = new AdapterCardView(getActivity(),arrayList); loadDatabase(); }
  27. 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 صدا زده میشه و دیتابیستون اپدیت میشه.
  28. 2 likes
    سلام، اینارو سمت سرور تعیین میکنه فقط شما باید موقعیت مکانی lat lang رو به سرور بفرستید و سرور براساس اون تبلیغات های مورد نظر رو بفرسته
  29. 2 likes
    میدونی کلونی یعنی چی؟! کلونی یعنی محل تجمع، یعنی جایی که همه دور هم جمع میشن و کاری انجام میدن. میدونی که دیگه کم کم جستجو بین هزاران سایت داره منقضی و خسته کننده میشه؟! تااااااازه اگه توی هزارتا سایت بتونی مطلبی که میخواستی رو پیدا کنی مگه تبلیغات میزارن که کمی مطلبت رو بخونی ؟! دیگه نگران نباش. اپلیکیشن کلونی برای برطرف کردن این مشکلات ساخته شده. توی این برنامه میتونی تمامی خواسته هات رو برطرف کنی. اهل ورزشی؟ ماشین و موتور چی؟ به زیبایی و سلامت خودت اهمیت میدی؟ به غذاهایی که میخوری چطور؟ اوقات بیکاری چیکار میکنی؟ میدونی اگه بخوای هرکدوم از این موارد رو نگاه کنی و لذت ببری چقدر زمان نیاز داری تا بتونی واسه هر کدوم یک سایت یا یک اپلیکیشن مناسب پیدا کنی... چرا خودت رو اذیت میکنی؟ چرا حافظه موبایلت رو پر میکنی؟ چرا حجم اینترنتت رو بیخودی مصرف میکنی؟ بیا کلونی رو نصب کن و خودت رو راحت کن. بجای اینکه 100 تا سایت رو بگردی، کلونی رو 1بار بگرد ... --------------------------- ویژگی های کلونی : - بروزرسانی روزانه و مستمر - مصرف فوق العاده کم از حجم اینترنت - مصرف کم باتری و رم گوشی - رابط کاربری شیک و زیبا و ... ------------------------- دیگه زیاد توضیح نمیدم، خودت نصب کن تا متوجه شی لینک دانلود : https://cafebazaar.ir/developers/panel/apps/com.tellfa.colony/info/?l=fa ممنون میشم نصب کنید و در بازار نظر بدید
  30. 2 likes
    خیلی خیلی ممنونم درست شد... فقط این کد drawerLayout.closeDrawers(); برای چی بود ؟ برای من فورس کلوز میدادو برنامم رو می بست حذفش کردم و یه سوال دیگه اگر بخوام با آیتم خروج برنامم بسته بشه باید چی بنویسم
  31. 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);
  32. 2 likes
    سلام امروز میخوایم کار با کتابخونه volley رو با هم یاد بگیریم.با افزودن این کتابخونه میتونید ارتباط با کد php که در سرورتون نوشتید رو سریع تر و آسون تر کنید. به این صورت که اول با این کد به پروژه خودتون اضافش کنید. compile 'com.mcxiaoke.volley:library:1.0.19' اگه مشکلی در اضافه کردن این کتابخونه دارید کلیک کنید. خب بریم سراغ کد نویسی کد های زیرو بذارید اونجایی که قراره ارتباط بر قرار شه RequestQueue queue= Volley.newRequestQueue(this); StringRequest myRequest=new StringRequest(Request.Method.POST, "My link", new Response.Listener<String>() { @Override public void onResponse(String response) { Toast.makeText(LogReg.this, response, Toast.LENGTH_SHORT).show(); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { Toast.makeText(LogReg.this, "خطا در ارتباط با سرور", Toast.LENGTH_SHORT).show(); } }) { @Override protected Map<String, String> getParams() throws AuthFailureError { Map<String , String> params = new HashMap<>(); params.put("username", "My Username"); params.put("password","My Password"); return params; } }; queue.add(myRequest); توضیحات: اولا که اونجایی که نوشتم Request.Method.POST در حقیقت داریم متد ارسال اطلاعات به فایل رابطمون رو تعیین میکنیم.قسمت mylink هم لینک فایل رو قرار میدید.تابع onResponse در صورت موفقیت آمیز بودن اجرا میشه و متن بازگشتی داخل متغیر response هست همچنین در صورتی که مشکل باشه تابع onErrorResponse اجرا میشه که با دستور error.tostring() به متن خطا دسترسی خواهید داشت.دو کد params.put هم مقادیرو ارسال میکنن(پارامتر اول اسم متغیر و دومی هم مقدار) و کد آخر هم در حقیقت درخواست ما که اسمش myRequest هستو تو صف ارسال (queue) قرار میده. تمام
  33. 2 likes
    ممنون آقای خسروآبادی اینکارایی که گفتید رو انجام میدم صرفا برای یاد گرفتنه وقتی یاد گرفتم و خواستم اپلیکیشن های خوب بسازم یه فکری برای این مشکل بر میدارم. از این که منو در حل این مشکل یاری کردید ممنونم آرزوی بهترین ها رو براتون دارم خدا نگه دار
  34. 2 likes
    ممنون دوست عزیز
  35. 2 likes

    نگارش 1.0.0

    95 دانلود

    سلام سورس کد اندروید موزیک پلیر مانند Spotify و Apple music همراه با سورس سمت سرور موفق باشید

    رایگان

  36. 2 likes
    میتونید چند تا Break point بزارید و با کلید F9 جابجا بشید
  37. 2 likes
    با سلام خدمت اساتید محترم من سابقه برنامه نویسی دارم ولی این اولین اپلیکیشن اندرویدمه و اگه امکانش هست نگاهی بهش بندازید و ایراداتش رو بهم بگید.الیبته اینم بگم اولین اپلیکیشن منه و دست تنهام پس زیاد سخت نگیرید https://cafebazaar.ir/app/iTrip.eTrip/?l=fa
  38. 2 likes
    سلام.فایل نمونه قرار داد
  39. 2 likes
    تبریک میگم مهندس سرسیفی عزیز قالب جدید سایت بسیار خوب هستش هم به دلیل اینکه به صورت واکنشگرا می باشد و برای نمایش در هر محیطی مناسب قالبلیت چت هم بسیار خوب است به دلیل اینکه بحث در مورد بعضی از موضوعات بسیار زیاد میشد و تاپیک تبدیل به اسپم بسیار زیادی از جواب ها و نقطعه نظر غیر مرتبط تشکیل میشد . الان با این قابلیت دیگه این انتفاق نخواد افتاد . پاینده باشید
  40. 2 likes
    خیلی ممنون از نظر خوبتون. حتما در روزهای آینده خیلی امکانات جدیدی را به انجمن اضافه میکنیم.
  41. 2 likes
    خوبه خوشم اومد قالب جالبیه و خوشحال شدم وااااقعا که انجمن یکم عوض شد قیافه ش خخخخ فقط این شکلکارو هم عوض کنید از این متحرکا بذارید
  42. 2 likes
    [align=center]به نام خدایی که غم از دست دادنشو ندارم [/align] [align=center]جلسه اول قرار داده شد(زیر همین پست هستش)[/align] [align=center]جلسه دوم ساخته شد(اینجا کلیک-یا تو تاپیک بگردید)[/align] [align=center]جلسه سوم ساخته شد(اینجا کلیک کنید)[/align] [align=right]بالاخره تصمیم گرفتم یه کار مفیدی واسه کاربران این سایت انجام بدم.کاری که مطمئنا به دردتون میخوره.آموزش ساخت کتاب اندرویدی. [/align] [align=right]هر وقت میام سایت،میبینم افرادی زیادی میخوان که برنامه های کتاب مانند بسازن.این کار رو میخوام به آسون ترین شکل بهتون یاد بدم.این رو هم بگم من خودم یه اماتورم زیاد از من انتظار حرفه بودن نداشته باشید [/align] [align=right]خب.بریم سر اصل مطلب [/align] [align=right]اول این که آموزش ها ویدئویی هستن.یعنی به صورت فیلم که این کار هم واسه شما آسونه هم من.(حوصله نوشتن ندارم).واسه شما خوبه چون راحت تر می فهمید. [/align] [align=right]این آموزش شاید 5-6 تا بشه که هر کدوم رو تو یه پست جدا و همچنین هر کدوم رو همراه با سورس کدش تا اون قسمت + برنامه های گفته شده+ کد های خاص تو یه فایل قرار میدم.:D[/align] [align=right].[/align] [align=right].[/align] [align=right]از همین الان بگم که سعی میکنم هر روزحداقل یه آموزش بذارم که تو یه هفته ای تموم شه.[/align] [align=right]دوما اینکه آموزش ما خیلی گرافیکی نیست.یعنی برنامه خیلی خوشگل نمیشه.ما چارچوبو یاد میدیم.شرمنده[/align] [align=right].[/align] [align=right].[/align] [align=right]پیشنیاز ها رو هم میگم:[/align] [align=right]1-نرم افزار اکلیپس آماده + چیز های مورد نیازش.(یعنی بشه باهاش همین الان یه اپ ساخت)[/align] [align=right]2-بلد بودن شما به مفاهیم اولیه برنامه نویسی اندروید(مثلا بتونید به برنامه بسازید از این صفحه به اون صفحه بره و اینجو صحبتا)[/align] [align=right]3-یه چیزایی از دیتابیس بدونید بد نیست.با این که کار ما خیلی مربوطه به دیتابیس هست،اما خودم کامل توضیح نمدم در حد همون کتاب میگم.[/align] [align=right]4-پشتکار و دنبال کردن آموزش ها.[/align] [align=right].[/align] [align=right].[/align] [align=right]سوالم داشتید همین تاپیک بپرسید.[/align] [align=right]از فردا اولین آموزش رو میذارم.(اولیش ساخت دیتابیس خارجی هست.)[/align] [align=center]به نام خدایی که غم از دست دادنشو ندارم[/align] [align=right]با اولین جلسه خدمت شما هستم.در این جلسه می آموزید چگونه دیتابیس نرم افزار خود را طراحی کنید.توسط نرم افزار SQLite expert professional[/align] [align=right].[/align] [align=right].[/align] [align=right]حجم فایل:12 مگ[/align] [align=right]محتویات:فیلم آموزش+دیتابیس 4 رکوردی خودمون[/align] [align=right]لینک دانلود...[/align] [align=right]*****************[/align] [align=right]نرم افزار SQlite expert جهت ساخت فایل دیتابیس[/align] [align=right]حجم:75 مگ[/align] [align=right]لینک دانلود...[/align] [align=right]پسورد فایل: soft98.ir[/align]
  43. 2 likes
    لطفا به سوال های زیر جواب بدید تا من قیمت خودم رو بهتون بگم : 1.ظاهر برنامه شما چگونه باشد؟ الف) معمولی ب) اختصاصی ج) طرح های موجود در بازار د)نمی دونم 2- آیا برنامه شما سیستم عضویت و ورود کاربران دارد؟ الف) بله ، سیستم عضویت و ورود اختصاصی ب)بله ، استفاده از سایت های اجتماعی ج)نمی دونم د)خیر 3 - آیا برنامه شما نیاز به سیستم پرداخت اینترنتی دارد؟ الف) بله یک درگاه اینترنتی ب)بله چند درگاه اینترنتی ج)نمی دونم د)خیر 4- آبا برنامه شما نیاز به همگامسازی دارد؟ الف)بله ب)خیر ج) نمی دونم 5-آیا برنامه شما سیستم نظرسنجی یا رای گیری دارد؟ الف)بله ب)خیر ج) نمی دونم 6- آیا کاربران شما پروفایل شخصی در برنامه دارند؟ الف)بله ب)خیر ج) نمی دونم 7-آیا به همراه برنامه نیاز به وب سایت هم دارید؟ الف)بله ب)خیر ج) نمی دونم 8-آیا نیاز به طراحی لوگو و آیکون اختصاصی دارید؟ الف)بله ب)خیر ج) نمی دونم
  44. 2 likes
    فک کنم با خودتون مشکل دارید اصلا مگه بنده قیمت گفتم!! انتظار داری همینطور علیک سلام پروژه رو بدیم بهتون ! البته واقعا دست مدیر انجمن درد نکنه که یه انجمن خوب داره تا بهترین رو انتخاب کنیم
  45. 2 likes
    سلام این مشکل نیست اکلیپس به شما راه اصولی نوشتن متن رو میگه مثلا : android:text="Medium Text" روش صحیح نوشتن کد بالا android:text="@strings/Medium Text" که شما در string مقدار متنون رو معیین کردید
  46. 2 likes
    [align=center]به نام خدایی که غم از دست دادنشو ندارم [/align] [align=right]با سلام خدمت دوستان گرامی.قسمت دوم هم ساختم.در این قسمت آموزش این هست که کلاس دیتابیسمون رو بسازیم.البته کد خیلی طولانی داره واسه همین اون کد هم قرارش دادم واستون.در این جلسه بعد از ساخت کلاس ابتدا فایل دیتابیسمون رو کپی میکنیم درون پروژه بعدش داخل گوشی انتقال میدیم به جای مخصوص بعدش هم تست میکنیم کپی شده یا نه!بعدشم یه تست میگیزیم ببینیم درست هست یا نه.[/align] [align=right]_____________[/align] [align=right]حجم فایل:30 مگابایت[/align] [align=right]محتویات:فیلم آموزش+پروژه تا اینجا+سورس کلاس دیتابیس در یک فایل txt[/align] [align=right]لینک دانلود....[/align] [align=right]_____________[/align] [align=right]نرم افزار Root Explorer[/align] [align=right]حجم فایل:2.5 مگ[/align] [align=right]نسخه:3.3.5 با پشتیبانی زبانی پارسی[/align] [align=right]لینک دانلود....[/align]
  47. 2 likes
    در این اموزش میخواهیم انیمیشنی برای دکمه قرار دهیم ابتدا دکمه ای در صفحه قرار داده.فایل xml به نام animation.xml با Resource type=Tween Animation و Root Element=Scale ایجاد میکنیم. کد زیر را در فایل ایجاد شده تایپ میکنیم. [shcode=xml]<?xml version="1.0" encoding="utf-8"?> android:fromXScale="0.1" android:toXScale="2.0" android:fromYScale="0.1" android:toYScale="2.0" android:pivotX="50%" android:pivotY="50%" android:duration="3000" > android:fromDegrees="0" android:toDegrees="180" android:pivotX="50%" android:pivotY="50%" android:duration="3000" android:startOffset="1500" > [/shcode] خصوصیت های Scale fromXScale و fromYScale: کنترل از چه اندازه ای در جهت محورX یا Yبزرگ شود toXScale و toYScale :کنترل تا چه اندازه ای در جهت محور X یا Y بزرگ شود. pivotX و pivotY : نقطه مبدا محور X و Y duration : زمان انیمیشن بر حسب میلی ثانیه در صورتی که بخواهیم از چند افکت استفاده کنیم از تگ set استفاده میکنیم. خصوصیت های Rotate fromDegrees :از چه درجه ای شروع به چرخش نماید toDegrees : تا چه درجه ای چرخش نماید startOffset: زمانی که پیش از اجرای انیمیشن لازم است با تمام شدن کار، به فایل MainActivity.java رفته و کد زیر را در ان تایپ میکنیم. [shcode=java]final Button b=(Button) findViewById(R.id.button1); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub Animation anim=AnimationUtils.loadAnimation(MainActivity.this, R.anim.animation); b.startAnimation(anim); } });[/shcode] با اجرای برنامه و کلیک روی دکمه، تنظیماتی که برای انیمیشن قرار داده اید را مشاهده میکنید.
  48. 2 likes
    در این تاپیک آموزشی، از ابتدا آموزش برنامه نویسی اندروید را شروع خواهیم نمود ،یکی از مشکلات برنامه نویسان اندروید کم یا نبود آموزش های اصولی اندروید میباشد ،بر همین اساس تصمیم بر آن داشتیم بطور جامع آموزش های فارسی را منتشر نماییم . بیشتر کاربران انجمن برنامه نویسی اندروید، کم و بیش با این مشکل رو به رو بوده اند که به چه صورتی اندروید را شروع کنند و شروع به آموزش اندروید بگیرند.بر این اساس در این تاپیک بطور جامع آموزش های اندروید قرار داده خواهد شد.. این تاپیک آموزشی هر چند روز یکبار بروز رسانی خواهد شد و آموزش ها جدیدتر قرار داده خواهد شد منو در اندروید ذخیره سازی اطلاعات در اندروید فرگمنت و گوگل مپ در اندروید وب سرویس در اندروید آموزش های متریال دیزاین در اندروید آموزش های کاتلین : با تشکر انجمن برنامه نویسی اندروید-پی سی دروید
  49. 2 likes
    [align=center] [/align] [align=center]درسته این کد همگانی شده همه بدلن ولی میزارم واسه آرشیو شدن کار با دگمه های فیزیکی افزایش/کاهش صدا[/align] [align=center] @Override public boolean dispatchKeyEvent(KeyEvent event) { int keyCode = event.getKeyCode(); if(keyCode == KeyEvent.KEYCODE_VOLUME_UP){ if (event.getAction() == KeyEvent.ACTION_UP){ // Dohme Afzayeshe Seda } return true; }else if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN){ if (event.getAction() == KeyEvent.ACTION_UP){ //Dogme Kaheshe Sheda } return true; } return super.dispatchKeyEvent(event); }[/align] [align=center]اینم تشخیص جهت لمس public class activity extends Activity implements SimpleGestureListener { private logskey detector; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean dispatchTouchEvent(MotionEvent me) { // Call onTouchEvent of SimpleGestureFilter class this.detector.onTouchEvent(me); return super.dispatchTouchEvent(me); } @Override public void onSwipe(int direction) { switch (direction) { case logskey.SWIPE_RIGHT: // Harakat be samte rast break; case logskey.SWIPE_LEFT: // Harakat be samte chap break; case logskey.SWIPE_DOWN: // Harakat be samte pain break; case logskey.SWIPE_UP: // Harakat be samte bala break; } } @Override public void onDoubleTap() { // Duble Click } } [/align] [align=center]این هم کد فهمیدن اینکه دستگاه تبلت هستش یا ...[/align] [align=center] public static boolean isTablet(Context context) { return (context.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) >= Configuration.SCREENLAYOUT_SIZE_LARGE; } [/align] [align=center]این هم کد ارسال شماره تلفن به شمار گیر Dialer[/align] [align=center] public void dial(String num){ Intent callIntent = new Intent(Intent.ACTION_DIAL); callIntent.setData(Uri.parse("tel:" + Uri.encode(num.trim().toString()))); callIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(callIntent); } استفاده از کد : dial("09215799615"); [/align] [align=center]این هم کد قرار دادن آهنگ مورد نظر به عنوان رینگتون[/align] [align=center] File k = new File(path, "mysong.mp3"); // path is a file to /sdcard/media/ringtone ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, "My Song title"); values.put(MediaStore.MediaColumns.SIZE, 215454); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); values.put(MediaStore.Audio.Media.ARTIST, "Madonna"); values.put(MediaStore.Audio.Media.DURATION, 230); values.put(MediaStore.Audio.Media.IS_RINGTONE, true); values.put(MediaStore.Audio.Media.IS_NOTIFICATION, false); values.put(MediaStore.Audio.Media.IS_ALARM, false); values.put(MediaStore.Audio.Media.IS_MUSIC, false); //Insert it into the database Uri uri = MediaStore.Audio.Media.getContentUriForPath(k.getAbsolutePath()); Uri newUri = main.getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri( myActivity, RingtoneManager.TYPE_RINGTONE, newUri ); لطفا تست کنید[/align] [align=center]اگه بخوای از یه پوشه مثلا از raw فراخوانی کنی میتونی این کد رو در یه دکمه قرار بدی و براحتی موزیک مورد نظرت رو بعنوان زنگ موبایل قرار بدی :[/align] [align=center] byte[] buffer = null; InputStream fIn = getBaseContext().getResources().openRawResource( R.raw.zang1); int size = 0; try { size = fIn.available(); buffer = new byte[size]; fIn.read(buffer); fIn.close(); } catch (IOException e) { return false; } String path = Environment.getExternalStorageDirectory().getPath() + "/media/audio/ringtones/"; String filename = "zang1.mp3"; boolean exists = (new File(path)).exists(); if (!exists) { new File(path).mkdirs(); } FileOutputStream save; try { save = new FileOutputStream(path + filename); save.write(buffer); save.flush(); save.close(); } catch (FileNotFoundException e) { return false; } catch (IOException e) { return false; } sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path + filename))); File k = new File(path, filename); ContentValues values = new ContentValues(); values.put(MediaStore.MediaColumns.DATA, k.getAbsolutePath()); values.put(MediaStore.MediaColumns.TITLE, filename); values.put(MediaStore.MediaColumns.MIME_TYPE, "audio/mp3"); // This method allows to change Notification and Alarm tone also. Just // pass corresponding type as parameter if (RingtoneManager.TYPE_RINGTONE == type) { values.put(MediaStore.Audio.Media.IS_RINGTONE, true); } else if (RingtoneManager.TYPE_NOTIFICATION == type) { values.put(MediaStore.Audio.Media.IS_NOTIFICATION, true); } else if (RingtoneManager.TYPE_ALARM == type) { values.put(MediaStore.Audio.Media.IS_ALARM, true); } Uri uri = MediaStore.Audio.Media.getContentUriForPath(k .getAbsolutePath()); Uri newUri = Zang.this.getContentResolver().insert(uri, values); RingtoneManager.setActualDefaultRingtoneUri(Zang.this, type, newUri); // Insert it into the database this.getContentResolver() .insert(MediaStore.Audio.Media.getContentUriForPath(k .getAbsolutePath()), values); return true; [/align] [align=center]این هم کد باز شدن تنظیمات wireless startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); این هم کد باز شدن انتخاب شبکه wireless برای اتصال به اون startActivity(new Intent(WifiManager.ACTION_PICK_WIFI_NETWORK)); [/align] [align=center]امیدوارم استفاده کنید[/align] [align=center]این کدها هر روز آپدیت میشن و کدهای جدیدتری بهشون اضافه میشه[/align] [align=center]ناموسن این همه کد میذارم ارزش یه اعتبار دادنو ندارم؟؟؟؟؟؟؟ [/align] [align=center]مرسی بروبچ [/align] [align=center]P30DROID[/align]
  50. 2 likes
    کاربران گرامی با درود و عرض احترام لطفا در ارسالهای خود و بخشهای مختلف انجمن پی سی دروید قوانین زیر را رعایت فرمائید: منع فعالیت سیاسی : هر گونه فعالیت سیاسی بر خلاف قوانین بوده و با کاربر خاطی سریعا برخورد خواهد شد. زبان فارسی : زبان اصلی این انجمن فارسی است ، لطفا در هنگام ارسال مطالب از زبان پینگلیش استفاده نکنید . قوانین عمومی 1- انجمن پی سی دروید بدون هیچگونه فعالیت در جهت کسب منافع مادی فقط و فقط در حیطه راهنمایی کاربران ، رفع مشکلات کاربران ، معرفی و آموزش اندروید فعالیت مینماید و هر کاربر یا مدیری که در جهت سودجویی و منفعت مالی اقدام به منحرف کردن مبحث و سوالات کاربران دیگر را داشته باشد در بار اول به مدت 24 ساعت و برای بار دوم برای همیشه از انجمن اخراج میگردد. 2- تبلیغات در انجمن ممنوع میباشد و کاربران صرفا مجاز به درج تبلیغ در امضا خود میباشد و ارسال پست و تاپیک های تبلیغاتی شامل اخطار و اخراج میشود. 3- تمامي کاربران مي بايست در هنگام ثبت نام در سايت ، از کلمات مناسب جهت استفاده در نام کاربري خود استفاده نمايند. در صورت مشاهده کلمات رکيک و نامناسب، اشتراک آن كاربر در اولين فرصت حذف خواهد شد و دسترسي وي به انجمنها قطع خواهد شد حتي المقدور نام كاربري را با حروف انگيسي به جاي فارسي ايجاد نماييد. 4- کاربران سايت مي بايست در هنگام ارسال پيغام در انجمن ها از کلمات مناسب استفاده نمايند. در صورت مشاهده کلمات رکيک و نامناسب ، اشتراک آن كاربر در اولين فرصت حذف خواهد شد و دسترسي وي به انجمنها قطع خواهد شد. 5- عنوان تاپيک بايد به خودي خود نشانگر محتوا و گفتگوي هاي تاپيک باشد . لطفا در هنگام ايجاد تاپيک به اين نکته توجه کنيد تا تاپيک شما بيشتر مورد توجه ساير کاربران قرار گيرد . از ايجاد تاپيک هايي با عناوين : کمک ، کمک فوري ، خيلي مهم و ساير عناوين عمومي جدا خودداري کنيد ... 6- در صورتي که مايل به ارسال مطلبي از يک سايت ديگر مي باشيد ، حتماً منبع آن را ذکر نماييد. در صورتي که مطلب يا موضوع مذکور نوشته شده توسط شخص خاصي بود ، حتماً نام وي را ذکر نماييد. 7- لطفا در هنگام مطرح کردن سوالات خود ، انجمن مناسب را انتخاب نماييد و از مطرح کردن سوالات خود در انجمنهاي نامتناسب با سوالتان خودداري نماييد. 8- لطفا در هنگام طرح سوالات خود آنها را به صورت جداگانه مطرح فرماييد. بدين معني که در صورتي که سوالهاي گوناگوني داريد ، آنها را در چندين موضوع جداگانه مطرح نماييد و از مطرح کردن تمامي سوالات در يک موضوع خودداري فرماييد . 9- لطفا در هنگام جواب دادن به سوالات از به کار گيري الفاظ و جملاتي که باعث دلسردي کاربر سوال کننده شود خودداري فرماييد. اين را بدانيد که اين سايت محل آموزش است و کساني هستند که سوالهايشان بسيار ابتدايي مي باشد. لذا از به کارگيري کلماتي که باعث شود کاربر به جاي گرفتن جواب سوال خود دلسرد شود اکيداً خودداري فرماييد. 10- لطفا در صورتي که جواب يک سوالي را نمي دانيد از ارسال مطالبي که باعث شلوغ کردن آن تاپيک ( يا سوال ) شود خودداري فرماييد. در صورتي که بحث خاصي داريد مي توانيد براي خودتان يک تاپيک عمومي باز کنيد. 11- از نوشتن يك سوال و يا يك نامه در انجمنهاي مختلف خودداري كنيد. طبق قانون شماره 7 انجمن مناسب و مرتبط به نامه خود را انتخاب كنيد و فقط در آن انجمن نامه خود را ارسال كنيد. 12- تمام کاربران و مدیران موظف به احترام گذاشتن به یکدیگر در انجمن پی سی دروید هستند.ارسال مطالب کنایه آمیز ، بازی با کلمات! ، پیام خصوصی توهین آمیز ، خرد کردن شخصیت افراد و هرگونه بحثی که نشان از بی ادبی و تمسخر دیگران باشد در این انجمن جایی ندارد و بلافاصله کاربر خاطی اخراج خواهد شد. 13- کاربران بسیاری هستند که حتی نمیدانند که روش کار یک انجمن به چه شکل است و یا سوالات خیلی مبتدی میپرسند لذا هیچ کاربری حق جسارت به این دسته از کاربران را نداشته و باید با احترام و با صبر و حوصله پاسخ کاربران و راهنمایی لازم داده شود. انجمن تخصصی اندروید پی سی دروید