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

  1. Farzad Sarseifi

    Farzad Sarseifi

    مدیریت انجمن


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

      6

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

      1,868


  2. a.khosroabadi

    a.khosroabadi

    مدیر انجمن


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

      6

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

      181


  3. Seven7up

    Seven7up

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


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

      5

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

      102


  4. hetbo

    hetbo

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


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

      4

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

      510



Popular Content

Showing most liked content since ۱۷/۰۶/۲۸ in پست ها

  1. 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); امید وارم آموزش مفیدی برای شما باشه من الله التوفیق
  2. 2 likes
    نه سخت نیس در حال حاظر دوتا دیتابیس پر کاربرد برای اندروید sqlite و realm هستند : https://realm.io/news/realm-for-android/ https://www.androidhive.info/2011/11/android-sqlite-database-tutorial/ منابع زیادی در اینترنت موجود هست .میتونید سرچ کنید
  3. 2 likes
    نه ربطی به این موضوع نداره شما تو تنظیمات اپلیکیشن مشخص مینید که حداقل ورژن اندروید(minSdk) که ساپورت میکنه چند باشه
  4. 1 like
    برنامه پزشک خانواده همه ما باید به فکر سلامتی خود باشیم و در این راه از هیچ تلاشی دریغ نکنیم. هرچند در موقع بیماری با مراجعه به پزشک میتوان مشکل را رفع نمود اما به قول معروف، پیشگیری بهتر از درمان است. بدین منظور نیاز به منابعی داریم که درباره خواص درمانی انواع گیاهان و یا نحوه مصرف داروها اطلاعات بدست آوریم و همچنین شیوه تغذیه سالم را بیاموزیم. خوشبختانه در حال حاضر این منابع به تعداد زیاد یافت میشوند و میتوانیم به راحتی از آنها استفاده کنیم. امروزه یکی از بهترین منابعی که به راحتی در دسترس همه مردم قرار دارد، تلفن همراه و تبلت است که میتواند به عنوان منبع ارزشمند و سهل الوصول اطلاعات مورد استفاده قرار بگیرد. در همین راستا، به معرفی نرم افزار ایرانی پزشک خانواده می پردازیم، که یکی از بهترین و کاملترین مراجع اطلاعاتی در حوزه سلامت، بهداشت و پزشکی میباشد. نرم افزار موبایل پزشک خانواده که برای سیستم عامل اندروید طراحی شده، در واقع مجموعه بسیار ارزشمندی از 15 برنامه کامل است که همگی در یک نرم افزار و با حجم بسیار پایین قرار داده شده اند. برنامه پزشک خانواده دارای 3 بخش اصلی است: 1. خواص خوراکی ها 2. دارو و درمان 3. اطلاعات پزشکی هر کدام از بخش های ذکر شده شامل مجموعه اطلاعات بسیار ارزشمندی هستند که در اداکمه به معرفی آنها می پردازیم. بخش خواص خوراکیها دارای مجموعه های عرقیات گیاهی، دمنوش ها، شربت ها و خواص میوه ها و گیاهان می باشد. 1. عرقیات گیاهی: شامل اطلاعات کامل، ویژگیها و خواص تعداد 74 عرق گیاهی. 2. دمنوشها: شامل اطلاعات کامل، ویژگیها، خواص و روش تهیه تعداد بیش از 100 دمنوش گیاهی شناخته شده. 3. شربتها: شامل اطلاعات کامل، ویژگیها، خواص و روش تهیه تعداد 60 شربت سنتی شناخته شده ایرانی. 4. گیاهان: شامل اطلاعات کاملی از خواص، مزایا و عوارض مصرف 455 میوه و گیاه شناخته شده که تصاویر با کیفیت و مناسبی از تمام این گیاهان نیز در نرم افزار گنجانده شده تا براحتی بتوان گیاه مربوطه را شناسایی نمود. این بخش، بدون شک یکی از کاملترین مجموعه های اطلاعات گیاهی است که تا کنون در کشور ایران طراحی شده است. بخش دارو و درمان دارای مجموعه های اطلاعات دارویی، داروهای گیاهی، نسخه و درمان، طب سنتی و طب اسلامی می باشد. 5. داروها: این قسمت شامل خواص، عوارض، شیوه مصرف، میزان مصرف و کلیه اطلاعات موجود در مورد 1392 داروی پر مصرف در کشور ایران است. همچنین نوع، ابعاد، شرکت تولید کننده و شکل ارائه آنها در داروخانه ها نیز در نرم افزار گنجانده شده است. 6. داروهای گیاهی: این قسمت دارای اطلاعات بیش از 80 داروی گیاهی رسمی به همراه نام و مشخصات تولید کننده آن در کشور ایران است. 7. بیماریها: شامل توضیحات کلی در مورد شناسایی علایم و همچنین روش های پیشگیری از تعداد حدود 500 بیماری شناخته شده. 8. درمانها: شامل انواع نسخه های گیاهی در مورد درمان 44 رده از بیماریها و مشکلات شایعی که اکثر مردم به آنها دچار میشوند مانند انواع نسخه های تقویت قوای جسمی، گیاهان و خوراکیهای ضد سرطان، تقویت بینایی و غیره 9. طب سنتی: این قسمت شامل بیش از 130 نسخه سنتی ایرانی است که بر اساس علم مزاج شناسی و در کتب کهن طب ایرانی گرد آوری شده اند و به ارائه روشهای تقویت و مبارزه با بیماریهای ممکن د رمورد تمامی اعضای بدن انسان میپردازد. 10. طب اسلامی: این قسمت یکی از کاملترین مجموعه های احادیث ائمه است که در مورد طب، سلامت روان و سلامت جسم ارائه شده اند. مجموعه 188 حدیث از رسول اکرم (ص)، امام باقر (ع)، امام صادق (ع)، امام رضا (ع) و ... که در مورد موضوعات مختلفی از جمله تغذیه اسلامی، بهداشت فردی، بهداشت روانی، خواص روزه، خواص خوراکیها و غیره ارائه شده است. بخش اطلاعات پزشکی دارای مجموعه های مقالات طبی، پوست و مو، انواع رژیم ها، روش تهیه داروها و راهنمای جواب آزمایش می باشد. 11. مقالات عمومی: این قسمت شامل حدود 600 مقاله اطلاعات عمومی در مورد سلامت و بهداشت میباشد. 12. پوست و مو: شامل مجموعه ای در حدود 200 مقاله جذاب و خواندنی در رابطه با انواع روشهای محافظت از پوست و مو، انواع ماسکهای صورت، تقویت ریشه موها، روشهای زیبایی مو و پوست برای بانوان و غیره. 13. رژیمها: یک مجموعه استثنایی از 48 مقاله در مورد انواع رژیمهای غذایی که شامل رژیم غذایی هنرپیشه ها و افراد معروف و همچنین انواع رژیمهای لاغری، چاقی، مناسب کودکان، مناسب بارداری و غیره میباشد. همچنین اطلاعات بسیار مفیدی در مورد رژیم و پرهیزهای غذایی مورد نیاز برای بیماران دیابتی، فقرآهن و انواع بیماریهای رایج مردانه و زنانه ارائه شده است. 14. روش تهیه: انواع راهنما و دستورالعمل تهیه و مصرف داروهای گیاهی، پماد، پودر، شستشو، جوشانده و غیره. 15. برگ آزمایش: مجموعه اطلاعات بسیار مفید و کاربردی در مورد روش خواندن انواع برگه های جواب آزمایش طبی مانند آزمایش خون، آزمایش بارداری، آزمایش ادرار و غیره که تمامی مشخصه های موجود در آزمایشها را به طور کامل تشریح نموده است. جهت دریافت رایگان این برنامه اینجا کلیک کنید. https://cafebazaar.ir/app/it.tadbir.tabib
  5. 1 like
    به نام خدا به زودی در همین تاپیک با آموزش ها و مثال های کاتلین با شما خواهیم بود. لطفا به این تاپیک پاسخ ندهید
  6. 1 like
    روی اعلامیه ها کار کنید با این که یه اعلامیه رو چک میکنی و میبینیش باز هم هر چند ثانیه یک بار روی صفحه ظاهر میشه
  7. 1 like
    میشه فایلbuilde.gradle رو هم ببینم؟ احتمالا باید کتابخانه های اضافه رو از داخل گریدل پاک کنید... مثلا میتونید اینها رو پاک کنید: compile fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) testCompile 'junit:junit:4.12' testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
  8. 1 like
    در این پست میخوایم خیلی سریع و کوتاه نحوه کار با Google maps رو بررسی کنیم. من فرض می کنم که شما در مورد برنامه نویسی در اندروید اطلاعات لازم رو دارید، تا بتونیم توضیحات رو کوتاه کنیم و به بخش اصلی کار بپردازیم. با فرض اینکه از طریق این لینک تونستید مقدمات وارد کردن گوگل مپ رو پیاده سازی کنید به سراغ توضیحات مورد نظر میریم. من از Fragment برای پیاده سازی UI استفاده کردم، به این صورت که در این اپ که کار توسعه اون رو انجام میدادیم از چند تب برای دسترسی به بخشهای مختلف استفاده کردیم، و تب Map رو با Fragment ساختیم و کد xml رو به این نحو نوشتیم: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/bg" tools:context="com.app.androidstudio.example.MapFragment"> <com.google.android.gms.maps.MapView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/mapView"> </com.google.android.gms.maps.MapView> </RelativeLayout> حالا به سراغ کد نویسی کلاس جاوا میریم، یه کلای جاوا به اسم MapFragment داریم، که به صورت زیر کد نویسی شده: (از توضیحات نحوه نوشتن کدهای مربوط به Fragment چشم پوشی کردم، در صورت نیاز و برخورد با سوال در همینجا مطرح کنید) import android.content.pm.PackageManager; import android.database.Cursor; import android.location.Criteria; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.FrameLayout; import android.widget.ListView; import android.widget.SimpleCursorAdapter; import android.widget.TextView; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.MapsInitializer; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.model.CameraPosition; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; /** * Created by s.jahanzadeh on 05/30/2017. */ public class MapFragmentMain extends Fragment { //معرفی آبجکتها و متغیرها به صورت گلوبال private MapView mapView; private GoogleMap googleMap; private TextView latitudeText, longitudeText; private static final String[] LOCATION_PERMS = { android.Manifest.permission.ACCESS_FINE_LOCATION }; private static final String[] COARSE_PERMS = { android.Manifest.permission.ACCESS_COARSE_LOCATION }; public MapFragmentMain() { // این بخش رو خالی بذارید } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //در اینجا نیازی به کد نویسی در این بخش نیست } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { //معرفی یک ویو برای فرگمنت View view = inflater.inflate(R.layout.map, container, false); //find view by ids latitudeText = (TextView) view.findViewById(R.id.latitudeText); longitudeText = (TextView) view.findViewById(R.id.longitudeText); mapView = (MapView) view.findViewById(R.id.mapView); mapView.onCreate(savedInstanceState); //با این دستور در واقع داریم زمینه رو برای استفاده از گوگل مپ فراهم میکنیم //بعضی از APIها نیاز به فراهم کردن بستر قبل از استفاده از اونها دارن //مانند BitmapDescriptorFactory و CameraUpdateFactory try { MapsInitializer.initialize(getActivity().getApplicationContext()); } catch (Exception e) { e.printStackTrace(); } // استفاده از getMapAsync باعث میشه که به صورت خودکار مپ به نمایش بیاد //البته نکات خیلی زیادی این مطلب داره که اگر بخوام به یکی از اونها اشاره بکنم این هست که //به دلیل استفاده از فرگمنت هر زمانی که ما view رو تغییر بدیم طبیعتا چرخه حیاطش فرگمنت به پایان میرسه //منظور از تغییر view رفتن به یک فرگمنت دیگه هست //تمامی آبجکتهایی که با گوگل مپ در ارتباط هستند به نوعی با ویو ما در ارتباط خواهند بود //پس این نکته خیلی مهمی هست که آبکتهایی مثل مارکر رو در پس زمینه نگه نداریم //چرا که باعث درگیر کردن مموری خواهد شد در به احتمال بسیار زیاد اگر دوباره این فرگمنت رو فراخوانی کنید ویو قفل خواهد کرد //دقیقا مشابه AsyncTask mapView.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap mMap) { googleMap = mMap; googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); // برای رفتن به موقعیت کاربر روی نقشه googleMap.getUiSettings().setMyLocationButtonEnabled(true); //بررسی permissionهای مورد نیاز if (ActivityCompat.checkSelfPermission(getContext().getApplicationContext(), android.Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getContext().getApplicationContext(), android.Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. requestPermissions(LOCATION_PERMS, 1337 + 3); requestPermissions(COARSE_PERMS, 1337 + 3); return; } //فعال کردن دکمه location روی نقشه googleMap.setMyLocationEnabled(true); //کدهای این قسمت خیلی مهم هستند //استفاده از locationManager برای دسترسی به سرویس لوکیشن LocationManager locationManager = (LocationManager) getActivity().getSystemService(getContext().getApplicationContext().LOCATION_SERVICE); //در کلاس Criteria متدی وجود داره با عنوان getBestProvider //استفاده از این کلاس باعث میشه که از بین GPS و Network هر کردوم که بهتر و قویتر بود مورد استفاده قرار بگیره Criteria criteria = new Criteria(); //گرفتن لوکیشن با استفاده از اطلاعات بالا Location location = locationManager.getLastKnownLocation(locationManager.getBestProvider(criteria, false)); //بردن دوربین نقشه روی محل کاربر CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(location.getLatitude(), location.getLongitude())).zoom(15).build(); //متحرک سازی دوربین googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); //ساخت مارکر با استفاده از نگه داشتن انگشت روی نقشه googleMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() { @Override public void onMapLongClick(LatLng latLng) { Marker marker; marker = googleMap.addMarker(new MarkerOptions().position(latLng).title("Point").snippet("My point")); double currentLat = marker.getPosition().latitude; double currentLon = marker.getPosition().longitude; latitudeText.setText(Double.toString(currentLat)); longitudeText.setText(Double.toString(currentLon)); } }); } }); return view; } //همونطور که در بالا توضیح دادم جهت جلوگیری از پر شدن نا بجای مموری طبق روال همیشگی متدهای زیر رو بسازید @Override public void onResume() { mapView.onResume(); super.onResume(); } @Override public void onPause() { super.onPause(); mapView.onPause(); } @Override public void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override public void onLowMemory() { super.onLowMemory(); mapView.onLowMemory(); } } این بدنه اصلی کدهای ما بود. امیدوارم توضیحات کافی باشه، در صورت نیاز سوالهاتون رو مطرح کنید تا هم دوستان بتونن جواب بدن هم بنده اگر در توانم باشه. مطمئنا کدهای بالا خالی از اشکال نیستن، پس اگر مطلبی جا افتاده به بزرگی خودتون بنده حقیر رو ببخشید... - با تشکر
  9. 1 like
    سلام دوستان. ببخشید من میخام داده هامو بسمت سرور بفرستم و بر اساس شماره موبایل و روز ک خود کاربر در اندروید وارد میکنه، یکسری اطلاعات select بشه و برای کاربر لیست بشه.گیری ک دارم اینه ک ارایه ای ک با جیسون ساخته میشه خالی هست.کدهای php و کدهای کلاس جاوا رو میزارم. لطفا راهنمایی کنید اشکال کارم کجاست. <?php include "config.php"; mysqli_query($con,"SET CHARSET UTF8"); $mobile=$_POST['user_mobile']; $day=$_POST['day']; $sql="SELECT `name_lesson`, `name_class`, `day`, `clock`, `college`, `cycle`, `user_mobile` FROM `tbl_lesson` WHERE user_mobile='$mobile' and day='$day'"; $result=$con->query($sql); $array_list=array(); $array=$result->fetch_all(MYSQLI_ASSOC); echo json_encode($array); ?> import android.app.ProgressDialog; import android.content.Context; import com.android.volley.DefaultRetryPolicy; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyError; import com.android.volley.toolbox.JsonArrayRequest; import com.android.volley.toolbox.Volley; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import ir.Class.SaveID; import ir.DataModel.GetSetTodayLesson; import ir.DataModel.GetSetUser; import static ir.Server.AuthenticationServer.SH_PRE_REGISTRATION; public class CatshTodayLesson { Context context; ProgressDialog progressDialog; public CatshTodayLesson(Context context){ this.context=context; } public void getpost(final CatshTodayLesson.onpost onpost) { SaveID saveID = new SaveID(context,SH_PRE_REGISTRATION); String keymobile=saveID.getSharedValue(SaveID.MOBILE);//class of sharedprefrences for get user_mobile String day="چهارشنبه"; final String url="http://192.168.56.1/server/show_today_timesheet.php?user_mobile="+""+keymobile+"day="+day; JsonArrayRequest jsonArrayRequest=new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { List<GetSetTodayLesson> data=new ArrayList<>(); for (int i=0;i<response.length();i++){ GetSetTodayLesson getSetTodayLesson=new GetSetTodayLesson(); try { JSONObject jsonObject=response.getJSONObject(i); getSetTodayLesson.setName_lesson(jsonObject.getString("name_lesson")); getSetTodayLesson.setClock(jsonObject.getString("clock")); getSetTodayLesson.setCollege(jsonObject.getString("college")); getSetTodayLesson.setName_class(jsonObject.getString("name_class")); getSetTodayLesson.setSycle(jsonObject.getString("cycle")); } catch (JSONException e) { e.printStackTrace(); } data.add(getSetTodayLesson); } onpost.onpost(data); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { } }); jsonArrayRequest.setRetryPolicy(new DefaultRetryPolicy(10000, DefaultRetryPolicy.DEFAULT_MAX_RETRIES,DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); Volley.newRequestQueue(context).add(jsonArrayRequest); } public interface onpost { void onpost(List<GetSetTodayLesson> data); } }
  10. 1 like
    سلام.بله میتوانید بر روی cordova ionic اپلیکیشن های خودتون رو منتشر کنید 2- پرداخت درون برنامه ای رو باید از خود مارکت پیگیری کنید که آیا Api برای اینکار دارند 3-بله گوگل مپ و Api های گوگل قابل دستیابی میباشند. 4- ionic جزو بهترین فریمورک های تحت cordova هستش که دارای جامعه بزرگی برای بروز رسانی و پشتیبانی میباشد برای ionic دو ورژن وجود دارد V1 و V2 که ورژن v2 بر روی Angular2 میباشد
  11. 1 like
    سلام بهترین کار این هستش شمانسخه کامل اندروید استودیوکه sdk همراه خودش داره حدودا 2 گیگ هستش اون رو دانلود کنید و همراه با Sdk اون رو نصب کنید بدون مشکل بالا میاد احتمال داره sdk های که میزارند برای دنلود ناقص باشند که البته اکثرا اینجوری هستند و باید یکی یکی پلاگینها رو دانلود کنید
  12. 1 like
    سلام میشه روی ویندوز هستش نصب کرد مهم منابع سیستم رم و سی پیو هستش دوم این که مشکلر از ادرس دهی sdk شما هستش ادرس دقیق پوشه sdk رو به برنامه بدید
  13. 1 like
    خیر دوست عزیز ایرادی نداره و درست هستش
  14. 1 like
    سلام این نیاز داره که گرادل رو آپ دیت کنید پیشنهاد میکنم کلا ادروید استودیو رو به نسخه 2.3.3 ارتقا بدید
  15. 1 like
    سلام دوست عزیز باید از spans استفاده کنید به این صورت final SpannableStringBuilder sb = new SpannableStringBuilder("your text here"); // Span to set text color to some RGB value final ForegroundColorSpan fcs = new ForegroundColorSpan(Color.rgb(158, 158, 158)); // Span to make text bold final StyleSpan bss = new StyleSpan(android.graphics.Typeface.BOLD); // Set the text color for first 4 characters sb.setSpan(fcs, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); // make them also bold sb.setSpan(bss, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE); yourTextView.setText(sb); این هم یک آموزش دیگه https://blog.stylingandroid.com/introduction-to-spans/
  16. 1 like
    سلام دوست عزیز خیر مشکلی نداره خیلی هم خوب هستش. زمانی که اندروید استودیو برای اولین بار اجرا کنید مسیر sdk باید بهش بدین
  17. 1 like
    برای رفع این مشکل حتما باید Dependency های مربوطه را دانلود نمایید برای اینکار میبایستی Gradle را در حالت Online قرار دهید و شروع به دانلود نمایید : متاسفانه بخاطر اینکه ایران در شرایط تحریم هستش دسترسی فقط توسط فیلتر شکن میباشد
  18. 1 like
    آیا در بایوس Virtualization را فعال کرده اید ؟
  19. 1 like
    چگونه از Iterator استفاده کنیم ؟ Iterator زمانی استفاده می شود که شما می خواهید در یک چرخه به اجزای یک مجموعه دسترسی داشته باشد. برای مثال ممکن است که شما بخواهید از یک از اجزا را نشان دهید. ساده ترین راه این کار این است که از یک تکرار استفاده کنید.Iterator شما را قادر می سازد تا از طریق یک چرخه،عناصر مورد نظر را بگیرید یا حذف کنید. متدهایIterator : ( ) boolean hasNext = اگر عناصر بیشتری وجود داشته باشد true در غیر اینصورت false بر می گرداند. ( ) Object next = عنصر بعدی را بازمی گرداند اگر یک عنصر بعدی وجود نداشته باشد NoSuchElementException را برمی گرداند. ( ) void remove = عنصر فعلی را حذف می کند. در اینجا یک مثال از هر دو Iterator و ListIterator را نشان می دهید. که از ArrayList استفاده شده است، public class IteratorDemo { // Create an array list ArrayList al = new ArrayList(); // add elements to the array list al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); // Use iterator to display contents of al System.out.print("Original contents of al: "); Iterator itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); // Modify objects being iterated ListIterator litr = al.listIterator(); while(litr.hasNext()) { Object element = litr.next(); litr.set(element + "+"); } System.out.print("Modified contents of al: "); itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); // Now, display the list backwards System.out.print("Modified list backwards: "); while(litr.hasPrevious()) { Object element = litr.previous(); System.out.print(element + " "); } System.out.println(); } Output: Original contents of al: C A E B D F Modified contents of al: C+ A+ E+ B+ D+ F+ Modified list backwards: F+ D+ B+ E+ A+ C+
  20. 1 like
    سلام دوست عزیز سوالتون خیلی کلی هستش و جای بحث زیادی داره بزارین به ترتیب بریم جلو. اول از همه اینکه کدهارو زیر هم بنویسید یا از متد ها یا کلاس های جداگونه استفاده کنید تاثیر چندانی روی پرفرمنس نداره ولی در آینده برای دیباگ کردن یا تغییر دادن و گسترش یا کم کردن ویژگی های برنامه تاثیر زیادی داره زمانی که شما تمام کدهارو زیر هم بنویسید بعد یک مدت میبینید یک کد پیچیده زیاد و کثیف دارین که به اصطلاح میگیم اسپاگتی کد و در آینده با مشکلات زیادی رو به رو میشید.ولی جدا کردن کد ها استفاده از design pattern ها و مفاهیم شی گرایی و solid باعث تمیز شدن خوانا شدن و همینطور راحتتر شدن نگهداری کد میشه. حالا بریم سراغ پرفرمنس تو لایه گرافیکی و رندر لایوت ها ببینید 2 تا عامل باعث میشه سرعت شما بره بالا 1- overdraw که مفهومش این هستش که شما وقتی وارد یکی از اکتیویتی ها میشین تو گوشی و دارین یک صفحه رو نگاه میکنید هر پیکسل چند بار رنگ میگیره.که این تعداد دفعات هرچی کمتر باشه تاثیر میزاره تو سریعتر رندر شدن صفحات. 2- hierarchies. منظور اینه اگه شما اکتیویتی یا فرگمنت هاتونو به صورت یک درخت در نظر بگیرین این درخت چند لایه داره و از روت تا برگ ها. هرچی تعداد لایه ها کمتر باشه پرفورمنس بهتری داره. یه راحکار این هستش که هرچی کمتر از linear layout استفاده کنید بهتره. در کل relative layout و constraint layout پرفورمنس بهتری از بقیه دارند. بعد از این ها بریم سراغ کد نویسی جایی که نیاز به تجربه و دانش بیشتری داره. این هم دو قسمت داره cpu و memory اول بریم سراغ memory ساخت ابجکت ها و از بین بردنشون خیلی مهمه اینکه درست ابجکت هارو بسازیم تا فقط در زمانی که نیاز دارین ساخته بشه و بعد از اینکه کارمون باهاش تموم شد از بین بره. از چه نوع متغییر هایی استفاده کنیم تا نیاز مارو برطرف کنه و حافظه کمتری بگیره از چه نوع داده ای استفاده کنید Object ها مثل ( Integer , Long , ... ) یا نوع داده پایه (int , long , ....) حالا بریم سراغ cpu اینجا جایی هستش که هنر کدنویسی و تجربه و دانش وارد میشه کدها باید با دقت نوشته بشه تا پردازش اضافی نداشته باشه و از پردازش ها و محاسبات اضافی خودداری کنید انتخاب مناسب ایتم هایی مثل List , ArrrayList , Map , HashMap , Set , HashSet , .... که اینجا باید کمی مطالعه داشته باشید و با خواص هرکدوم آشنا باشید مثلا بعضی از این ها مرتب هستند بعضی ها نا مرتب تو بعضی سرعت خواندن ازشون بالاتره تو بعضی هاشون سرعت نوشتن. بعضی هاشون سرچ داخلشون سریعتره و .... که باید با هرکدوم از اینها آشنایی داشته باشید و با توجه به کاربردتون ازش استفاده کنید. و خوب در نهایت میرسیم به مبحث multithreading که پیچیدگی های خودشو تو اندروید داره استفاده اشتباه و زیاد ازش باعث میشه که به جای سرعت بالاتر نتیجه معغیر مجاز بگیرید و برنامتون کندتر بشه. باید بدونید کجا از Thread یا Asynctask یا Looder , .... استفاده کنید و مزایا و معایب هرکدومو بدونید. ببخشید یکم طولانی شد البته به شدت سعی کردم خلاصه بگم (خیلی خیلی خیلی خلاصه) و این مبحث هنوووز ادامه دارد و جای بحث زیاد .......
  21. 1 like
    مسیر و نام فایل رو بفرستید String youFilePath1 = Environment.getExternalStorageDirectory().toString()+"/test.mp3" String youFilePath2 = Environment.getExternalStorageDirectory().toString()+"/test1.mp3" File f1=new File(youFilePath1); File f2=new File(youFilePath2);
  22. 1 like
    ممنون بسیار تعجب کردم از پاسخگویی سریعتون واقعا خسته نباشید میگم بهتون
  23. 1 like
    محدودیت ۶۵K متدها یکی از مشکلاتی است که کاربران با آن مواجه می شوند و multidexing به عنوان روشی برای این مشکل پیشنهاد شده است. Multidexing راه حلی بسیار خوبی از سوی گوگل است، راه اندازی multidex Multidexing یک راه حل کامل و همراه با مستندسازی های خوب است. به منظور بکارگیری multidex در پروژه پیشنهاد می شود که نگاهی به Android Developer site بیندازید، my Github نیز یک پروژه نمونه را برای آشنایی بیشتر در اختیار شما قرار می دهد. تاثیر multidex بر کارآیی اپلیکیشن در هنگام راه اندازی برخی از کلاس ها در بازه زمانی بین شروع اپلیکیشن و نمایش تمامی عکس ها توسط Proguard شناسایی نمی شوند در حالی که در فایل dex اصلی ذخیره شده اند. سوالی که مطرح می شود این است که چگونه از لود شدن این کلاس ها در حین راه اندازی اپلیکیشن مطلع شویم. خوشبختانه متدی به نام findLoadedClass در ClassLoader وجود دارد، کار لازم بررسی ران تایم پس از پایان راه اندازی اپلیکیشن می باشد. پس از آن هر کلاسی که در فایل dex دوم ذخیره شده و در حین راه اندازی اپلیکیشن بارگذاری می شود به فایل dex اصلی جابجا شده و نام کلاس در فایل multidex.keep افزوده می شود. استفاده از multindex در gradle برنامه : android { compileSdkVersion 21 buildToolsVersion "21.1.0" defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Change 1: Enabling multidex support. multiDexEnabled true } ... } //Change 2: If your minSdkVersion is lower than 21 then add below dependency dependencies { compile 'com.android.support:multidex:1.0.0' ..... ..... } استفاده ار کلاس multindex : public class YouApplication extends MultiDexApplication { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); } } در نهایت استفاده آن را در برنامه : <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.android.multidex.myapplication"> <application ... android:name="android.support.multidex.MultiDexApplication"> ... </application> </manifest>
  24. 1 like
    بله بجای 127.0.0.1 ای پی امولاتوری که باهاش کار میکنید بزارید
  25. 1 like
    توی این پست میخوایم طریقه کار با دیتابیس خارجی رو اموزش بدیم. برای این کار با نرم افزار SQLite Expert Personal یا هر نرم افزاری که راحت بودین دیتابیس و درست می کنیم. توی این برنامه دیتابیس ExternalDB رو با یک جدول به نام tbl1 و دو فیلد به نامهای Id و Name ایجاد کردیم. و داده های مورد نظر را توی جدول وارد میکنیم. کارمون با دیتابیس خارجی تموم شد حالا برنامه نویسی رو شروع می کنیم. پروژه جدیدی ایجاده کرده و دیتابیسی که درست کرده بودیم و توی پوشه asset قرار میدیم. فایل Database.java رو ایجاد کرده و کد زیر رو توی اون تایپ می کنیم. package com.p30droid.externaldatabase; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; public class Database extends SQLiteOpenHelper { String DB_PATH = null; public static String DB_NAME = "ExternalDB"; private SQLiteDatabase myDataBase; private final Context myContext; /** * Constructor Takes and keeps a reference of the passed context in order to * access to the application assets and resources. * * @param context */ public Database(Context context) { super(context, DB_NAME, null, 2); this.myContext = context; DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/"; } public void createDataBase() throws IOException { boolean dbExist = checkDataBase(); if (dbExist) { // do nothing - database already exist } else { // By calling this method and empty database will be created into // the default system path // of your application so we are gonna be able to overwrite that // database with our database. this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } } private boolean checkDataBase() { SQLiteDatabase checkDB = null; try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } catch (SQLiteException e) { // database does't exist yet. } if (checkDB != null) { checkDB.close(); } return checkDB != null ? true : false; } /** * Copies your database from your local assets-folder to the just created * empty database in the system folder, from where it can be accessed and * handled. This is done by transfering bytestream. * */ private void copyDataBase() throws IOException { // Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; // Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); // transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } // Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException { // Open the database String myPath = DB_PATH + DB_NAME; // SQLiteDatabase.NO_LOCALIZED_COLLATORS myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY); } @Override public synchronized void close() { if (myDataBase != null) myDataBase.close(); super.close(); } // return cursor public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) { return myDataBase.query("pwp_singers", null, null, null, null, null, null); } @Override public void onCreate(SQLiteDatabase arg0) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) { // TODO Auto-generated method stub } } خط 21 اسم دیتابیس و قرار دادیم.توابع دیگه هم مربوط به باز کردن،بستن،چک کردن وجود دیتابیس و ... هست(لازم به توضیح بود بگین توضیح بدمش) توی فایل activity_main.xml یه لیست ویو قرار میدیم. توی فایلMainActivity.java کد زیر و تایپ می کنیم. package com.p30droid.externaldatabase; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import android.os.Bundle; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.ListView; import android.app.Activity; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; public class MainActivity extends Activity { Database myDbHelper; SQLiteDatabase db; ListAdapter adapter; ArrayList> data; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ListView lst=(ListView) findViewById(R.id.listView1); Load_Database(); db = myDbHelper.getReadableDatabase(); Cursor c = db.rawQuery("select * from tbl1", null); data = new ArrayList>(); for (; c.moveToNext() { HashMap map = new HashMap(); String id = c.getString(c.getColumnIndex("Id")); String name = c.getString(c.getColumnIndex("Name")); map.put("id", id); map.put("name", name); data.add(map); } adapter = new list_view(this, data); lst.setAdapter(adapter); } private void Load_Database() throws Error { myDbHelper = new Database(MainActivity.this); try { myDbHelper.createDataBase(); } catch (IOException ioe) { throw new Error("Unable to create database"); } try { myDbHelper.openDataBase(); } catch (SQLException sqle) { throw sqle; } } } خط 25 دیتابیس و چک میکنیم که ایجاد شده یا نه.اگه هست بازش کنه اگه نه ایجاد میکنه. خط 27 اسم جدول و نوشتیم تا اطلاعات اونو بخونیم. خط 32و 33 فیلدهایی که میخوایم و قرار دادیم و در اخر هم با اداپتور اونو توی لیست ویو میریزیم. خط 38 هم از لیست ویو سفارشی استفاده کردیم که اموزشش تو سایت هست . اینم فایلهاش فایل list_view.java package com.p30droid.externaldatabase; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.content.res.AssetManager; import android.graphics.Color; import android.graphics.Typeface; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; public class list_view extends BaseAdapter { private Activity activity; private ArrayList> data; private LayoutInflater inflate; ViewHolder holder; public list_view(Activity a, ArrayList> d) { // TODO Auto-generated constructor stub activity = a; data = d; inflate = (LayoutInflater) activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } @Override public int getCount() { // TODO Auto-generated method stub return data.size(); } @Override public Object getItem(int position) { // TODO Auto-generated method stub return position; } @Override public long getItemId(int position) { // TODO Auto-generated method stub return position; } @Override public View getView(int arg0, View view, ViewGroup arg2) { // TODO Auto-generated method stub View v1 = view; if (v1 == null) { v1 = inflate.inflate(R.layout.list_view, null); holder = new ViewHolder(); holder.txt_name = (TextView) v1.findViewById(R.id.txt_name); holder.txt_id = (TextView) v1.findViewById(R.id.txt_id); holder.txt_id.setVisibility(View.GONE); v1.setTag(holder); } else { holder = (ViewHolder) v1.getTag(); } HashMap song = new HashMap(); song = data.get(arg0); holder.txt_id.setText(song.get("id")); holder.txt_name.setText(song.get("name")); return v1; } static class ViewHolder { TextView txt_name; TextView txt_id; } } فایل list_view.xml <?xml version="1.0" encoding="utf-8"?> android:layout_width="fill_parent" android:layout_height="fill_parent" > android:id="@+id/txt_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" android:layout_marginRight="22dp" android:layout_marginTop="30dp" /> android:id="@+id/txt_id" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/txt_name" android:layout_marginRight="96dp" android:layout_toLeftOf="@+id/txt_name" /> و خروجی کار سورس برنامه
  26. 1 like
    برای افزایش سرعت و همچنین بهینه سازی برنامه می توانیم از برنامه نویسی چند نخی « Thread » استفاده نماییم. با این کار می توانیم وظایف برنام را به چند قسمت تقسیم و به طور همزمان انجام بدهیم تا سرعت بالاتری برای برنامه رقم بزنیم. برنامه نویسی چند نخی یکی از اساسی ترین و مهمترین ارکان برنامه نویسی می باشد که متأسفانه حتی بسیاری از برنامه نویسان حرفه ای نیز آنرا نادیده می گیرند. چرا که با وجود سرعت های بالای CPU در سخت افزارهای PC و Notebook نیاز به استفاده از Thread ها به چشم نمی آید اما یکی از بزرگترین دلایل وجود Hang و در نتیجه Crash ها عدم توجه به این تکنیک برنامه نویسی می باشد. در دستگاه های ضعیف تر نظیر Smart Phone ها استفاده از Thread ها بسیار واجب و ضروری می باشد و حتی برای انجام هر عمل کم زمانبر نیز استفاده از Thread ها اکیداً توصیه می گردد. اهم خواص Thread ها عبارتند از: Thread ها به تنهایی وجود ندارند و باید Process ای د ربرگیرنده آنها باشد. Thread های هم والد « هم Process » از یک Memory مشترک استفاده می نمایند که آن نیز Memory اشغال شونده توسطProcess آنها می باشد. Thread ها چه هم والد، چه غیر هم والد دارای Stack های جدا هستند. با خاتمه یک Thread تأثیری به سایر Thread ها وارد نمی گردد. Thread ها دیگر نمی توانند در برگیرنده Thread دیگری باشند. اهم خواص Process ها عبارتند از: Process های متفاوت از Memory های متفاوتی استفاده می نمایند. Process های متفاوت از هر نظر مستقل از یکدیگر عمل می نمایند. Process ها می توانند شامل یک و یا بیشتر Thread باشند. با خاتمه یک Process، تمامی Thread های آن نیز به ناگاه خاتمه می یابند. Process ها دارای Stack نیستند و در ساده ترین شرایط تنها Thread آنها دارای Stack می باشد. روش های استفاده از Thread برنامه نویسی Thread ها یا اصطلاحا Concurrent Programming بسیار پیچیده می باشد و تکنیک های زیادی دارد. با توجه به این که در این موضوع چندین تألیف حدودا 1000 صفحه ای موجود است، انتظار نداریم حتی 5% آنرا هم بشناسیم. لذا به دو تا از ساده ترین و پرکاربرد ترین روش های استفاده از این تکنیک ها در برنامه نویسی اندروید که در شرایط حتی پیچیده نیز مشکل ما را حل خواهند نمود اکتفا خواهیم نمود. آن دو تکنیک عبارتند از : Handler Handler ما را قادر به افزودن پیام به رشته می سازد که آن را ایجاد کرده و ما را قادر می سازد تا برخی از برنامه های اجرایی را به منظور اجرا در آینده برنامه ریزی نماییم. Handler مربوط به رشته اصلی برنامه می باشد. Handler پیام ها و برنامه های اجرایی و پیام های ارسال شده از رشته ها را به رشته برنامه اصلی مدیریت و برنامه ریزی می نماید. AsyncTask AsyncTask ما را بدون دستکاری رشته ها قادر به اجرای چند رشته می سازد. AsyncTask روش های جدیدی را فراهم می آورد که انجام اقدامات پس زمینه را تسهیل کرده و نتایج را به رشته رابط کاربری انتقال می دهند. اگر ما اقدامی مربوط به رابط کاربری نظیر دانلود داده ها برای نمایش در یک فهرست را انجام می دهیم، از AsyncTask استفاده خواهیم نمود. AsyncTasks می بایست برای اقدامات کوتاه (چند ثانیه ای) به کار برده شوند. public void buttonClick(View view) { Runnable runnable = new Runnable() { public void run() { long endTime = System.currentTimeMillis() + 20*1000; while (System.currentTimeMillis() < endTime) { synchronized (this) { try { wait(endTime - System.currentTimeMillis()); } catch (Exception e) {} } } handler.sendEmptyMessage(0); } }; Thread mythread = new Thread(runnable); mythread.start(); }
  27. 1 like
  28. 1 like
    همانگونه که در جریان قرار گرفته اید در 18 مارس 2013 ورژم دوم گوگل مپ معرفی شد که دارای ویژگی های بسیاری بهتری نسبت به ورژن قبلی است. مانند پیدا کردن سریعتر موقعیت کاربر که بستگی به اینکه این موقعیت از GPS بدست امده یا WIFI و یا mobile data (موبایل دیتا) متغیر میباشد. GPS دقیق است و بهترین نتیحه را برمیگرداند ولی عیب آن مصرف زیاد باطری دیوایس و کند بودن میباشد و غیر فعال بودن در مکان های سرپوشیده میباشد.اما WIFI ضعیفترین و غیر دقیق ترین نتیجه را برمیگرداند ولی خوبی آن مصرف کم باطری میباشد. مراحل مورد نیاز برای انجام پروژه: 1- ایجاد برنامه جدید(کامپایل با Google Api) 2- وارد کردن کتابخانهGoogle Play Services 3- دریافت اثر انگشت SHA1 شما 4- دریافت mapKey خود را با استفاده از SHA1 5- اصلاح AndroidManifest.xml برنامه اندرویدی جدیدی ایجاد کنید. [align=center]http://www.codeproject.com/KB/android/614946/01.jpg[/img][/align] وارد کردن کتابخانهGoogle Play Services 1- کتابخانه google play services خود را که در مسیر زیر است پیدا کنید. ....\android-sdk\adt-bundle-windows-x86_64-20130522\adt-bundle-windows-x86_64-20130522\sdk\extras\google و آن را به Workspace خود انتقال دهید. 2- کتابخانه را به محیط Eclipse وارد کنید.( File\Import\Existing Android Code Into Workspace ) [align=center]http://www.codeproject.com/KB/android/614946/02.jpg[/img][/align] کتابخانه Google Play Services را به روش زیر به پروژه خود اضافه کنید . روی پروژه کلیک راست کرده سپس گزینه properties را انتخاب کنید به تب اندروید رفته و روی دکمه add کلیک کنید فقط کتابخانه Google Play Services را اضافه کرده و ok کنید. [align=center]http://www.codeproject.com/KB/android/614946/030.jpg[/img][/align] دریافت اثر انگشت SHA1 شما به مسیر زیر بروید: Window\Preferences Android\Build اثر انگشت خود را پیدا کرده و کپی کنید. [align=center]http://www.codeproject.com/KB/android/614946/05.jpg[/img][/align] به پنجره کنسول Google Apis بروید. [align=center]http://www.codeproject.com/KB/android/614946/06.jpg[/img][/align] پروژه جدیدی ایجاد کنید. [align=center][/align] گزینه Google Maps Android API V2 را فعال کنید. [align=center][/align] روی Create New Android Key کلیک کنید. [align=center]http://www.codeproject.com/KB/android/614946/09.jpg[/img][/align] SHA1 را وارد کنید و بعد از آن ; و نام پکیج برنامه. [align=center]http://www.codeproject.com/KB/android/614946/10.jpg[/img][/align] اصلاح فایل AndroidManifest.xml 1- اضافه کردن تگ زیر قبل از تگ android:name="com.example.osman.permission.MAPS_RECEIVE" android:protectionLevel="signature"/> android:glEsVersion="0x00020000" android:required="true"/> 2- اضافه کردن کد زیر قبل از تگ android:name="com.google.android.maps.v2.API_KEY" android:value="YOUR_KEY"/> و MainActivity شما مانند کد زیر باشد. import android.os.Bundle; import android.app.Activity; import android.support.v4.app.FragmentActivity; import android.view.Menu; public class MainActivity extends FragmentActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } برای استفاده از نشانگر در نقشه از کد زیر در فایلMainActivity استفاده کنید. GoogleMap googleMap; googleMap = ((SupportMapFragment)(getSupportFragmentManager().findFragmentById(R.id.map))).getMap(); LatLng latLng = new LatLng(-33.796923, 150.922433); googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); googleMap.addMarker(new MarkerOptions() .position(latLng) .title("My Spot") .snippet("This is my spot!") .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))); googleMap.getUiSettings().setCompassEnabled(true); googleMap.getUiSettings().setZoomControlsEnabled(true); googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
  29. 1 like
    در این تاپیک آموزشی، از ابتدا آموزش برنامه نویسی اندروید را شروع خواهیم نمود ،یکی از مشکلات برنامه نویسان اندروید کم یا نبود آموزش های اصولی اندروید میباشد ،بر همین اساس تصمیم بر آن داشتیم بطور جامع آموزش های فارسی را منتشر نماییم . بیشتر کاربران انجمن برنامه نویسی اندروید، کم و بیش با این مشکل رو به رو بوده اند که به چه صورتی اندروید را شروع کنند و شروع به آموزش اندروید بگیرند.بر این اساس در این تاپیک بطور جامع آموزش های اندروید قرار داده خواهد شد.. این تاپیک آموزشی هر چند روز یکبار بروز رسانی خواهد شد و آموزش ها جدیدتر قرار داده خواهد شد منو در اندروید ذخیره سازی اطلاعات در اندروید فرگمنت و گوگل مپ در اندروید وب سرویس در اندروید آموزش های متریال دیزاین در اندروید با تشکر انجمن برنامه نویسی اندروید-پی سی دروید
  30. 1 like
    آقای قلندری دستت درد نکنه که زحمت ترجمه کتاب آموزش مقدماتی اندروید رو داری می کشی . واقعا ازت ممنونم . آیا این ترجمه ها رو ممکنه در آینده بصورت فایل پی دی اف برای دانلود قرار بدین ؟
  31. 1 like
    بالاخره اون کاری که من می خواستم دارید انجام می دید مرسی
  32. 1 like
    برای استفاده از حالت لرزش دستگاه باید از توابع زیراستفاده نمود: در ابتدا باید مجوزی در مانیفست درخواست شود <uses-permission android:name="android.permission.VIBRATE" /> پس از آن استفاده از لرزاننده دستگاه، فقط سرویسی دیگر از سیستم اندروید است که توسط چارچوب فراهم می شود. این کار می تواند توسط VIBRATor انجام شود: (Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE با یک نمونه VIBRATor تنها متد ()Vibrator را برای آغاز لرزش دستگاه فراخوانی کنید (v.vibrate(300 امیدوارم مفید واقع شود: