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

  1. Omid Zakeri

    Omid Zakeri

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


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

      42

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

      86


  2. Seven7up

    Seven7up

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


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

      16

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

      89


  3. Farzad Sarseifi

    Farzad Sarseifi

    مدیریت انجمن


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

      11

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

      1,838


  4. Behrad Ravanbod

    Behrad Ravanbod

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


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

      7

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

      25



Popular Content

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

  1. 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 می باشد..
  2. 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; } }
  3. 2 likes
    سلام یه مدت پیش داشتم توی اینترنت گشت میزدم که به یک کتابخانه ای خیلی خوبی برخورد کردم که کار رو برای ارتباط با سرور بهتر از هر کتاب خانه ای راحت تر کرده اینجا آموزش این کتاب خانه رو به صورت متنی قرار خواهم داد ولی بعدا به صورت ویدئو در قالب یک پروژه کامل این کتاب خانه رو آموزش میدم. ویژگی های مهم این کتاب خانه جدا کردن متد های پست ، گت ، داشتن دانلود منیجر در خود کتاب خانه ، و هم چنین آپلود منیجر که این کتاب خونه رو از همه متمایز کرده و سرعت خوبی هم داره خب بریم سر آموزش اول مییایم به وسیله گردل کتاب خونه رو به پروژه اضافه میکنیم compile 'com.amitshekhar.android:android-networking:1.0.0' بعد به منی فیست دسترسی به اینترنت رو میدیم <uses-permission android:name="android.permission.INTERNET" /> بعد از اضافه شدن کتابخانه به پروژه و تعریف دسترسی حالا توی اکتیویتی که میخوایم عملیات ارسال و دریافت رو انجام بدیم اول میای کد زیر رو توی بخش OnCreate پروژه قرار میدیم تا کتابخانه اینشیالایز بشه AndroidNetworking.initialize(getApplicationContext()); بعد از این که کتابخانه آماده شد حالا میریم سراغ متد های ارسال و دریافت ابتدا متد GET AndroidNetworking.get("http://yourDomin.com/{pageNumber}") .addPathParameter("pageNumber", "0") .addQueryParameter("limit", "3") .addHeaders("token", "1234") .setTag("test") .setPriority(Priority.LOW) .build() .getAsJSONArray(new JSONArrayRequestListener() { @Override public void onResponse(JSONArray response) { // do anything with response } @Override public void onError(ANError error) { // handle error } }); بجای yourDomin.com باید ادرس دامنه و فایل رو قرار بدید مقادیر ارسالی رو در این سه بخش قرار میدیم .addPathParameter("pageNumber", "0") .addQueryParameter("limit", "3") .addHeaders("token", "1234") البته این سه پارامتر قابل اضافه شدن هستند حالا متد Post AndroidNetworking.post("http://yourDomin.com/createAnUser") .addBodyParameter("firstname", "Amit") .addBodyParameter("lastname", "Shekhar") .setTag("test") .setPriority(Priority.MEDIUM) .build() .getAsJSONObject(new JSONObjectRequestListener() { @Override public void onResponse(JSONObject response) { // do anything with response } @Override public void onError(ANError error) { // handle error } }); شما میتوانید مقادیر رو در پارمتر addBodyParameter قرار بدید البته شما میتونید اطلاعات رو به صورت یک فایل ، ابجکت و جیسون هم بفرستید در زیل سه نوع ارسال وجود دارد User user = new User(); user.firstname = "Amit"; user.lastname = "Shekhar"; AndroidNetworking.post("http://yourDomin.com/createUser") .addBodyParameter(user) // posting java object .setTag("test") .setPriority(Priority.MEDIUM) .build() .getAsJSONArray(new JSONArrayRequestListener() { @Override public void onResponse(JSONArray response) { // do anything with response } @Override public void onError(ANError error) { // handle error } }); JSONObject jsonObject = new JSONObject(); try { jsonObject.put("firstname", "Amit"); jsonObject.put("lastname", "Shekhar"); } catch (JSONException e) { e.printStackTrace(); } AndroidNetworking.post("hhttp://yourDomin.com/createUser") .addJSONObjectBody(jsonObject) // posting json .setTag("test") .setPriority(Priority.MEDIUM) .build() .getAsJSONArray(new JSONArrayRequestListener() { @Override public void onResponse(JSONArray response) { // do anything with response } @Override public void onError(ANError error) { // handle error } }); AndroidNetworking.post("http://yourDomin.com/postFile") .addFileBody(file) // posting any type of file .setTag("test") .setPriority(Priority.MEDIUM) .build() .getAsJSONObject(new JSONObjectRequestListener() { @Override public void onResponse(JSONObject response) { // do anything with response } @Override public void onError(ANError error) { // handle error } }); خوب مقادیر برگشتی در متد زیر به صورت یک جیسون ابجکت برگشت داده میشوند ( این متد در خود متد گت و پست هست ) .getAsJSONObject(new JSONObjectRequestListener() { @Override public void onResponse(JSONObject response) { // do anything with response } @Override public void onError(ANError error) { // handle error } }); در صورتی که جواب برگشت داده شد در onResponse به صورت جییسون ابجکت ذخیره میشود و اگر خطای رخ داد در متد onError برگشت داده میشود خب حالا اگر میخواید یک فایلی رو از ادرسی دانلود کنید میتونید از متد ذیل استفاده کنید AndroidNetworking.download(url,dirPath,fileName) .setTag("downloadTest") .setPriority(Priority.MEDIUM) .build() .setDownloadProgressListener(new DownloadProgressListener() { @Override public void onProgress(long bytesDownloaded, long totalBytes) { // do anything with progress } }) .startDownload(new DownloadListener() { @Override public void onDownloadComplete() { // do anything after completion } @Override public void onError(ANError error) { // handle error } }); url ادرس فایل dirPath ادرس محل ذخیره فایل fileName نمای که میخواید فایل بر روی دیوایس ذخیره بشه متد setDownloadProgressListener وضعیت دانلود رو برمیگردونه متد startDownload زمانی که دانلود شروع شد منتظر میشه که دانلود به پایان میرسه یا خیر که دو متد داره متد onDownloadComplete زمانی که دانلود به اتمام ریسدو فایل دانلود شد مقداریرو بر میگردونه و اگر خطای رخ داد توسط متد onError برگشت داده میشه برای آپلود میتونید از متد زیر استفاده کنید AndroidNetworking.upload(url) .addMultipartFile("image",file) .addMultipartParameter("key","value") .setTag("uploadTest") .setPriority(Priority.HIGH) .build() .setUploadProgressListener(new UploadProgressListener() { @Override public void onProgress(long bytesUploaded, long totalBytes) { // do anything with progress } }) .getAsJSONObject(new JSONObjectRequestListener() { @Override public void onResponse(JSONObject response) { // do anything with response } @Override public void onError(ANError error) { // handle error } }); فایل را به وسیله متد addMultipartFile میتوانید ارسال کنید نمایش تصویر به صورت مستقیم از اینترنت به وسیله این کتابخانه میتونید تصویری رو بدون نیزا به کتابخانه های مانند پیکاسو و گلید در ایمیج ویوی خود تابخانه نمایش بدید <com.androidnetworking.widget.ANImageView android:id="@+id/imageView" android:layout_width="100dp" android:layout_height="100dp" android:layout_gravity="center" /> imageView.setDefaultImageResId(R.drawable.default); imageView.setErrorImageResId(R.drawable.error); imageView.setImageUrl(imageUrl); گرفتن Bitmap از ادرس همراه با یکسری مقادیر AndroidNetworking.get(imageUrl) .setTag("imageRequestTag") .setPriority(Priority.MEDIUM) .setBitmapMaxHeight(100) .setBitmapMaxWidth(100) .setBitmapConfig(Bitmap.Config.ARGB_8888) .build() .getAsBitmap(new BitmapRequestListener() { @Override public void onResponse(Bitmap bitmap) { // do anything with bitmap } @Override public void onError(ANError error) { // handle error } }); خب تا اینجا متد های مهم این کتاتخانه رو گفتم البته متد های دیگری هم داره که ادرس مستقیم کتابخانه رو میزارم تا استفاده کنید https://github.com/amitshekhariitbhu/Fast-Android-Networking امید وارم که این کتابخانه و این آموزش مفید باشد
  4. 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();
  5. 2 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); امید وارم آموزش مفیدی برای شما باشه من الله التوفیق
  6. 1 like
    سلام میخواستم بدونم بهترین روش دریافت اطلاعات کدومه . از طریق کلاس asynctask یا کتابخانه مثل والی
  7. 1 like
  8. 1 like
  9. 1 like
    با سلام زرین پال اومده کتاب خانه ای ایجاد کرده که میشه به راحتی بدون نوشتن کد های سمت سرور درون برنامه یک درون پرداختی ایجاد کرد که میشه خود برنامه نویس امنیتش رو تامیین کنه خب من هم اومدم آموزش ویدئوی این کتاب خانه رو ظبط کرد که برای شما قرار میدم آقای سرسیفی من برای اینکه به زرین پال بفرستم توی پیکو فایل آپلود کردم اگر میشه خودتون توی سایت ارسال کنید و اتچ کنید سپاس دانلود از سرور انجمن اندروید ایران zarinpalpayment.mp4 لینک کمکی : لینک دانلود
  10. 1 like
  11. 1 like
  12. 1 like
    به نام خدا [align=justify]شاید هم تا بحال به فکر این افتاده باشید که برای کاربران اپلیکیشن خود پوش نوتیفیکیشن (push notification) ارسال کنید و او را از اتفاقی جدید در اپلیکیشن خود آگاه کنید ولی به دلیل پیچیدگی کد نویسی و یا بالا بودن هزینه های نگهداری سرور از این قابلیت صرف نظر کرده اید. یکی از راه حلهای میان بر برای استفاده از این ابزار، استفاده از سرویسهای است که به شما کمک می کند به کاربران خود پوش نوتیفیکیشن ارسال کنید.[/align] [align=justify]یکی از سایتهای ایرانی که این سرویس را ارائه میدهد، سایت "پوشه" است. شما با ثبت نام در این سایت و با گرفتن کد مربوط به گوشی تلفن همراه و قرار دادن آن در اپلیکیشن خود، پنل مدیریتی سروری حرفه ای را در اختیار دارید که می توانید به کاربران خود پوش نوتیفیکیشن ارسال کنید. در اصل "پوشه" مشکل پیچیدگی های اجرای کار و هزینه های نگهداری سرور را حل کرده است و شما به راحتی می توانید از این طریق به کاربرانتان پوش نوتیفیکیشن ارسال کنید و از مزایای آن بهره مند شوید. تفاوت عمده پوشه با سایر سایتهای مشابه خارجی در این است که با استفاده از پنل و کتبخانه پوشه، دیگر عملا هیچ نیازی به کد نویسی سرور و کلاینت ندارید و در عین حال می توانید از تمام امکانات یک پوش نوتیفیکیشن حرفه ای بهره مند شوید.[/align] [align=center]http://bayanbox.ir/view/3018637000632362025/GCM.jpg[/img] [/align] [align=justify] این سرویس قابلیتهای متعدد و کاربردی را برای توسعه دهندگان فراهم میکن که مهمترین آنها موارد زیر است:[/align] عدم نیاز به کد نویسی سرور و کلاینت و در اختیار داشتن تمامی امکانات نداشتن هزینه های نگهداری سرور فیلتر کردن کاربران و ارسال هدفمند پوش نوتیفیکیشن حذف هزینه ها و پیچیدگی اجرای کد سرور برای ارسال پوش نوتیفیکیشنهای حاوی عکس مشاهده آمار از قبیل میزان دلیوری و گستردگی نسخه اندروید کاربران شما و … امکان ارسال انواع مختلف اعلان امکان تنظیم نمایشی اعلان مانند انتخاب رنگ led و ... [align=right]برای آگاهی بیشتر از امکانات این سایت و سرویس هایی که رائه می دهد به آدرس: http://pushe.co مراجعه کنید.[/align] امیدواریم شما را به زودی در پوشه ببینیم.
  13. 1 like
    سلام دوست عزیز از کلاس Build باید استفاده کنی یه سر به لینک زیر بزن https://developer.android.com/reference/android/os/Build.html چندتا نمونه android.os.Build.VERSION.SDK android.os.Build.DEVICE android.os.Build.MODEL android.os.Build.PRODUCT
  14. 1 like
  15. 1 like
    تبدیل تصاویر به صورت circular bitmap (دایره) public Bitmap getCroppedBitmap(Bitmap bitmap) { Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Config.ARGB_8888); Canvas canvas = new Canvas(output); final int color = 0xff424242; final Paint paint = new Paint(); final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); paint.setAntiAlias(true); canvas.drawARGB(0, 0, 0, 0); paint.setColor(color); // canvas.drawRoundRect(rectF, roundPx, roundPx, paint); canvas.drawCircle(bitmap.getWidth() / 2, bitmap.getHeight() / 2, bitmap.getWidth() / 2, paint); paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); canvas.drawBitmap(bitmap, rect, rect, paint); //Bitmap _bmp = Bitmap.createScaledBitmap(output, 60, 60, false); //return _bmp; return output; }
  16. 1 like
  17. 1 like
  18. 1 like
    یکی از مشکلات بزرگی که در توسعه برنامه های اندرویدی دیده می شود جاستیفای کردن متن در اندروید است.به صورت پیش فرض هیچ ابزاری در اندروید وجود ندارد که بوسیله آن بتوان یک متن جاستیفای شده در برنامه داشت. بنابراین اولین اقدام یک توسعه دهنده در مواجهه با این مشکل، جستجو به دنبال کتاخانه ای مناسب برای انجام این کار است. من هم مدتی پیش به چنین کتابخانه ای نیاز داشتم اما با جستجوی اینترنت و زیرورو کردن سایت ها و فروم های مختلف در کمال تعجب هیچ کتابخانه ای برای این کار نیافتم! البته ناگفته نماند که روش هایی مثل استفاده از WebView معرفی شده بودند که استفاده از آنها مشکلات جانبی فراوانی داشت. بنابراین تصمیم گرفتم یک کتابخانه برای این کار ایجاد کنم تا همه کسانی که به این ویژگی در تولید برنامه های خود نیاز دارند بتوانند از آن استفاده کنند. این کتابخانه با نام JustifiedTextview هم اکنون در github قرار داده شده است و از آدرس زیر قابل مشاهده و دریافت است: https://github.com/navabi/JustifiedTextView
  19. 1 like
  20. 1 like
    سلام دوستان عزیز این فیلم آموزشی یاد میگیریم چطوری یک فرم ارتباط با ما در برنامه ایجاد کنیم شما بعد از یاد گیری این آموزش میتونید انواع برنامه های ارتباط با سرور رو به راحتی بنویسید. لینک دانلود فیلم : دانلود از پیکو فایل
  21. 1 like
  22. 1 like
  23. 1 like
  24. 1 like
  25. 1 like
    سلام اسنک بار رو میخوام یه توضیح مختصر بگم چیز جالیه میتونید به جای Toast استفاده کنین اول این کتابخونه هارو به پروژه اضافه کنین (اگه ندارید) compile 'com.android.support:appcompat-v7:23.0.1' compile 'com.android.support:design:23.0.1' خب حالا میریم یه نمونه سادشو درست کنیم Snackbar snackbar = Snackbar .make(coordinatorLayout, "Welcome to AndroidHive", Snackbar.LENGTH_LONG); snackbar.show(); دستور اول یه اسنک درست میکنه ورودی اولش لایوت صفحه هست.ورودی دوم هم متن پیام و ورودی سوم هم زمان نمایش هست دستور دوم هم کارش نمایش هست. مثال بعدی: Snackbar snackbar = Snackbar .make(coordinatorLayout, "Message is deleted", Snackbar.LENGTH_LONG) .setAction("UNDO", new View.OnClickListener() { @Override public void onClick(View view) { Snackbar snackbar1 = Snackbar.make(coordinatorLayout, "Message is restored!", Snackbar.LENGTH_SHORT); snackbar1.show(); } }); snackbar.show(); خب تفاوت این مثال با قبلی اینه که این علاوه بر نمایش پیام،دستور هم اجرا میکنه به کمک setAction که ورودی اولش متن اون دکمه و ورودی دوم هم دستورات برای اجرای دکمه هست. امید وارم خوب بوده باشه
  26. 1 like
  27. 1 like
  28. 1 like
    سلام به تمامی دوستان . امیدوارم امسال مثل 2 سال پیش همچنان کاربران با قدرت به این ماه مبارک توجه نشان دهند تا برای انجمن و علم برنامه نویسی مفید باشند . تنها چیزی که فکر میکنم بیشتر از جایزه ارزشمند هست همین علمی است که به اشتراک گذاشته میشه . شاید خیلی از کاربران جدید انجمن با من آشنایی نداشته باشند ، متاسفانه به دلیل خدمت سربازی حدودا 8 ماهی میشه من در انجمن فعالیتی ندارم . 9 ماه از خدمتم باقی مونده ، مطمئنا بعد از خدمت با قدرت به علمی که عاشقشم ادامه خواهم داد . با آروزی موفقیت یا علی
  29. 1 like
  30. 1 like
  31. 1 like
    Application در برنامه نویسی اندروید یک کامپوننت بالا دستی (top-level component) است که قبل از Activity، Services، BroadcastReceivers، و ContentProviders ها ایجاد می شود، هر برنامه اندروید فقط یک کامپوننت Application دارد که با استفاده از متد Context.getApplication قابل دسترسی است. یکی از کاربرد های کامپوننت Application به اشتراک گذاری متغییر های global بین تمام کامپوننت های یک پروژه است. در فایل AndroidManifest.xml یک تگ application وجود دارد که در صورتی که شما کامپوننت application سفارشی خود را تعریف کرده باشید می توانید با استفاده از خصوصیت android:name آن را معرفی کنید. public class MyApplication extends Application { @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); } @Override public void onCreate() { super.onCreate(); } @Override public void onLowMemory() { super.onLowMemory(); } @Override public void onTerminate() { super.onTerminate(); } } مانیفست مربوطه : <application android:icon="@drawable/icon" android:label="@string/app_name" android:name="MyApplication">
  32. 1 like
    /** * Used to scroll to the given view. * * @param scrollViewParent Parent ScrollView * @param view View to which we need to scroll. */ private void scrollToView(NestedScrollView scrollViewParent, final View view) { // Get deepChild Offset Point childOffset = new Point(); getDeepChildOffset(scrollViewParent, view.getParent(), view, childOffset); // Scroll to child. scrollViewParent.smoothScrollTo(0, childOffset.y); } /** * Used to get deep child offset. * <p/> * 1. We need to scroll to child in scrollview, but the child may not the direct child to scrollview. * 2. So to get correct child position to scroll, we need to iterate through all of its parent views till the main parent. * * @param mainParent Main Top parent. * @param parent Parent. * @param child Child. * @param accumulatedOffset Accumalated Offset. */ private void getDeepChildOffset(final ViewGroup mainParent, final ViewParent parent, final View child, final Point accumulatedOffset) { ViewGroup parentGroup = (ViewGroup) parent; accumulatedOffset.x += child.getLeft(); accumulatedOffset.y += child.getTop(); if (parentGroup.equals(mainParent)) { return; } getDeepChildOffset(mainParent, parentGroup.getParent(), parentGroup, accumulatedOffset); } scrollToView(scrollView,txt_word);
  33. 1 like
    اندروید استودیو پلاگین خاصی برای کار نیاز نداره. فعلا SDK اپدیت باشه کافیه و کار خودتون رو شروع کنید
  34. 1 like
  35. 1 like
    چی نصب کردید.اسم پلاگین یا کتابخانه شو قرار دهید ؟
  36. 1 like
    از کجا اندروید استودیو رو دانلود کردید؟ آیا SDK خودتون رو آپدیت کردید ؟
  37. 1 like
    با سلام خدمت دوستان عزیز خیلی از دوستان رو دیدم که تلاش میکردن سورس تلگرام را بدون خطا اجرا کنند ولی با مشکل برخورد میکردند تصمیم گرفتم این فیلم آموزشی رو ظبط کنم و برای یاد گیری عزیزان روی سایت قرار بدم با این ففیلم آموزشی شما میتوانید بدون هیچ مشکلی سورس تلگرام را بر روی شبیه ساز و هر نوع گوشی دیگری اجرا کنید آموزش پولی هستش که رایگان شده توسط صاحب آموزش لینک دانلود :دانلود TelegramSource_errors.mp4
  38. 1 like
    مشکل از هاست رایگان بود. با خرید هاست مشکل حل شد. دوستان هیچ وقت از هاست رایگان استفاده نکنید.
  39. 1 like
    سلام این آموزش تصویری رو ببینید ابتدای آموزش گفتم چطوری NDK رو به اندورید استودیو اضافه کنید
  40. 1 like
  41. 1 like
  42. 1 like
    Android-FilePicker: یک photopicker برای انتخاب تصاویر یا متن ها از یک لیست بسیار زیبا از فایل ها است. Android-FilePicker-master.zip
  43. 1 like
  44. 1 like
  45. 1 like
  46. 1 like
    ن فریمورک مختص اندروید طراحی شده است. یادگیری آن بسیار آسان است و به راحتی به یاد می‌ماند. همچنین جداول مورد نیاز را به طور خودکار خواهد ساخت. روابط یک به یک و یک به چند را پشتیبانی می‌کند و عملیات CURD را با سه متد Save,Delete و Find که البته FindById هم جزء آن است، پیاده سازی می‌کند. برای استفاده از این فریمورک نیاز است ابتدا متادیتا‌های زیر را به فایل manifest اضافه کنید: <meta-data android:name="DATABASE" android:value="my_database.db" /> <meta-data android:name="VERSION" android:value="1" /> <meta-data android:name="QUERY_LOG" android:value="true" /> <meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.my-domain" /> برای تبدیل یک کلاس به جدول هم از کلاس این فریم ورک ارث بری می‌کنیم: public class User extends SugarRecord<User> { String username; String password; int age; @Ignore String bio; //this will be ignored by SugarORM public User() { } public User(String username, String password,int age){ this.username = username; this.password = password; this.age = age; } } با آمدن ORM‌ها به دنیای برنامه نویسی، کار برنامه نویسی نسبت به قبل ساده‌تر و راحت‌تر شد. عدم استفاده کوئری‌های دستی، پشتیبانی از چند دیتابیس و از همه مهمتر و اصلی‌ترین هدف این ابزار "تنها درگیری با اشیا و مدل شیء گرایی" کار را پیش از پیش آسان‌تر نمود. در این بین به راحتی می‌توان چندین نمونه از این ORM‌ها را نام برد مثل IBatis , Hibernate ,Nhibernate و EF که از معروفترین آن‌ها هستند. من در حال حاضر قصد شروع یک پروژه اندرویدی را دارم و دوست دارم بجای استفاده‌ی از Sqlitehelper، از یک ORM مناسب بهره ببرم که چند سوال برای من پیش می‌آید. آیا ORM ای برای آن تهیه شده است؟ اگر آری چندتا و کدامیک از آن‌ها بهتر هستند؟ شاید در اولین مورد کتابخانه‌ی Hibernate جاوا را نام ببرید؛ ولی توجه به این نکته ضروری است که ما در مورد پلتفرم موبایل و محدودیت‌های آن صحبت می‌کنیم. یک کتابخانه همانند Hibernate مطمئنا برای یک برنامه اندروید چه از نظر حجم نهایی برنامه و چه از نظر حجم بزرگش در اجرا، مشکل زا خواهد بود و وجود وابستگی‌های متعدد و دارا بودن بسیاری از قابلیت‌هایی که اصلا در بانک‌های اطلاعاتی موبایل قابل اجرا نیست، باعث می‌شود این فریمورک انتخاب خوبی برای یک برنامه اندروید نباشد. معیارهای انتخاب یک فریم ورک مناسب برای موبایل: سبک بودن: مهمترین مورد سبک بودن آن است؛ چه از لحاظ اجرای برنامه و چه از لحاظ حجم نهایی برنامه سریع بودن: مطمئنا ORM‌های طراحی شده‌ی موجود، از سرعت خیلی بدی برخوردار نخواهند بود؛ اگر سر زبان هم افتاده باشند. ولی باز هم انتخاب سریع بودن یک ORM، مورد علاقه‌ی بسیاری از ماهاست. یادگیری آسان و کانفیگ راحت تر. OrmLight این فریمورک مختص اندروید طراحی نشده ولی سبک بودن آن موجب شده‌است که بسیاری از برنامه نویسان از آن در برنامه‌های اندرویدی استفاده کنند. این فریم ورک جهت اتصالات JDBC وSpring و اندروید طراحی شده است. نحوه معرفی جداول در این فریمورک به صورت زیر است: @DatabaseTable(tableName = "users") public class User { @DatabaseField(id = true) private String username; @DatabaseField private String password; public User() { // ORMLite needs a no-arg constructor } public User(String username, String password) { this.username = username; this.password = password; } // Implementing getter and setter methods public String getUserame() { return this.username; } public void setName(String username) { this.username = username; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } } با استفاده از کلمات کلیدی DatabaseTable@ در بالای کلاس و DatabaseField@ در بالای هر پراپرتی به معرفی جدول و فیلدهای جدول می‌پردازیم. سورس این فریمورک را می‌توان در گیت هاب یافت و مستندات آن در این آدرس قرار دارند. SugarORM این فریمورک مختص اندروید طراحی شده است. یادگیری آن بسیار آسان است و به راحتی به یاد می‌ماند. همچنین جداول مورد نیاز را به طور خودکار خواهد ساخت. روابط یک به یک و یک به چند را پشتیبانی می‌کند و عملیات CURD را با سه متد Save,Delete و Find که البته FindById هم جزء آن است، پیاده سازی می‌کند. برای استفاده از این فریمورک نیاز است ابتدا متادیتا‌های زیر را به فایل manifest اضافه کنید: <meta-data android:name="DATABASE" android:value="my_database.db" /> <meta-data android:name="VERSION" android:value="1" /> <meta-data android:name="QUERY_LOG" android:value="true" /> <meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="com.my-domain" /> برای تبدیل یک کلاس به جدول هم از کلاس این فریم ورک ارث بری می‌کنیم: public class User extends SugarRecord<User> { String username; String password; int age; @Ignore String bio; //this will be ignored by SugarORM public User() { } public User(String username, String password,int age){ this.username = username; this.password = password; this.age = age; } } بر خلاف OrmLight که باید فیلد جدول را معرفی می‌کردید، اینجا تمام پراپرتی‌ها به اسم فیلد شناخته می‌شوند؛ مگر اینکه در بالای آن از عبارت Ignore@ استفاده کنید. باقی عملیات آن از قبیل اضافه کردن یک رکورد جدید یا حذف رکورد(ها) به صورت زیر است: User johndoe = new User(getContext(),"john.doe","secret",19); johndoe.save(); //ذخیره کاربر جدید در دیتابیس //حذف تمامی کاربرانی که سنشان 19 سال است List<User> nineteens = User.find(User.class,"age = ?",new int[]{19}); foreach(user in nineteens) { user.delete(); }
  47. 1 like
    این فریمورک مختص اندروید طراحی نشده ولی سبک بودن آن موجب شده‌است که بسیاری از برنامه نویسان از آن در برنامه‌های اندرویدی استفاده کنند. این فریم ورک جهت اتصالات JDBC وSpring و اندروید طراحی شده است. @DatabaseTable(tableName = "users") public class User { @DatabaseField(id = true) private String username; @DatabaseField private String password; public User() { // ORMLite needs a no-arg constructor } public User(String username, String password) { this.username = username; this.password = password; } // Implementing getter and setter methods public String getUserame() { return this.username; } public void setName(String username) { this.username = username; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } }
  48. 1 like
    با آمدن ORM‌ها به دنیای برنامه نویسی، کار برنامه نویسی نسبت به قبل ساده‌تر و راحت‌تر شد. عدم استفاده کوئری‌های دستی، پشتیبانی از چند دیتابیس و از همه مهمتر و اصلی‌ترین هدف این ابزار "تنها درگیری با اشیا و مدل شیء گرایی" کار را پیش از پیش آسان‌تر نمود.در این بین به راحتی می‌توان چندین نمونه از این ORM‌ها را نام برد مثل IBatis , Hibernate ,Nhibernate و EF که از معروفترین آن‌ها هستند.من در حال حاضر قصد شروع یک پروژه اندرویدی را دارم و دوست دارم بجای استفاده‌ی از Sqlitehelper، از یک ORM مناسب بهره ببرم که چند سوال برای من پیش می‌آید. آیا ORM ای برای آن تهیه شده است؟ اگر آری چندتا و کدامیک از آن‌ها بهتر هستند؟ شاید در اولین مورد کتابخانه‌ی Hibernate جاوا را نام ببرید؛ ولی توجه به این نکته ضروری است که ما در مورد پلتفرم موبایل و محدودیت‌های آن صحبت می‌کنیم. یک کتابخانه همانند Hibernate مطمئنا برای یک برنامه اندروید چه از نظر حجم نهایی برنامه و چه از نظر حجم بزرگش در اجرا، مشکل زا خواهد بود و وجود وابستگی‌های متعدد و دارا بودن بسیاری از قابلیت‌هایی که اصلا در بانک‌های اطلاعاتی موبایل قابل اجرا نیست، باعث می‌شود این فریمورک انتخاب خوبی برای یک برنامه اندروید نباشد.معیارهای انتخاب یک فریم ورک مناسب برای موبایل: سبک بودن: مهمترین مورد سبک بودن آن است؛ چه از لحاظ اجرای برنامه و چه از لحاظ حجم نهایی برنامه سریع بودن: مطمئنا ORM‌های طراحی شده‌ی موجود، از سرعت خیلی بدی برخوردار نخواهند بود؛ اگر سر زبان هم افتاده باشند. ولی باز هم انتخاب سریع بودن یک ORM، مورد علاقه‌ی بسیاری از ماهاست. یادگیری آسان و کانفیگ راحت تر. greenDAO-master.zip
  49. 1 like
    push Notification یعنی اینکه برای تمامی کاربرانی که اپلیکیشن مربوطه را نصب کرده اند پیغامی از سمت سرور ارسال میشد و به شکل Notification نمایش داده میشود و با انتخاب هر پیغام یک فعالیت خاص انجام میشود مانند باز شدن یک وب سایت،لینک یک اپلیکیشن در مارکت ها و .... اینکار باعث میشود که برنامه ای که کاربران زیادی دارد بتواند به عنوان یک راه تبلیغی هم از آن استفاده برد
  50. 1 like
    سلام در آموزش خواهیم آموخت که چگون خطای ریسور و یا همان R قرمز را رفع کنیم باید بگم این روش برای اکثر خطا های احتمالی که به وجود می ایند قابل انجام هستش و به این صورت رفع خواهند شد مگر خطا های دستوری و کدی که از سمت ما هستند لینک آپارات http://www.aparat.com/v/PCMaE