۱۳۹۳/۰۸/۰۴, ۰۸:۰۶ ب.ظ (آخرین تغییر در ارسال: ۱۳۹۳/۰۸/۰۵, ۱۱:۳۵ ق.ظ توسط admin.)
با سلام
من از کد زیر برای بررسی اتصال به اینترنت استفاده میکنم:
کد:
public void ShowAlertDialog() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
alertDialog.setTitle(R.string.nettitle);
alertDialog.setMessage(R.string.netmessage);
alertDialog.setIcon(R.drawable.ic_launcher);
// Setting Positive "Yes" Button
alertDialog.setPositiveButton(R.string.netyes,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
new NetCheck().execute();
}
});
// Setting Negative "NO" Button
alertDialog.setNegativeButton(R.string.netno,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// Write your code here to invoke NO event
dialog.cancel();
}
});
// Showing Alert Message
alertDialog.show();
}
/**
* Async Task to check whether internet connection is working.
**/
private class NetCheck extends AsyncTask<String,String,Boolean>
{
private ProgressDialog nDialog;
@Override
protected void onPreExecute(){
super.onPreExecute();
nDialog = new ProgressDialog(MainActivity.this);
nDialog.setTitle("لطفاً صیر کنید");
nDialog.setMessage("بررسی اتصال به اینترنت");
nDialog.setIndeterminate(false);
nDialog.setCancelable(true);
nDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "بستن", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
nDialog.show();
}
/**
* Gets current device state and checks for working internet connection by trying .
**/
@Override
protected Boolean doInBackground(String... args){
حال من میخواهم دو دکمه در دو اکتیویتی مجزا بسازم که زمانی روی هر یک از آن ها کلیک شد این کد اجرا شود. آیا راهی است که تنها با یکبار نوشتن این کد (به صورت Global یا روش دیگر) و فراخوانی آن در اکتیویتی ، بررسی اتصال به اینترنت انجام شود؟ زیرا دوباره قرار دادن این کد در چند اکتیویتی حجم برنامه را بالا میبرد و باعث غیر مهندسی شدن آن میشود.
سلام.
شما باید یک کلاس (class) بسازید که حاوی کدهای فوق باشد (مثلا کدها را در یک روش (method) از آن کلاس قرار می دهید)، سپس در هر Activity که قصد دارید آن کد اجرا شود، ابتدا یک شیء (object) از آن کلاس (class) می سازید و سپس روش (method) مورد نظر از شیء را اجرا می کنید (که از کلاس به ارث برده است). در مورد ساخت یک کلاس (class) برای پروژه اندروید، کلید زیر را بخوانید :
البته در کلید فوق، Context مربوط به Activity را هم به کلاس می فرستیم، اما اگر کدها نیازی به Context ندارند، می توانید بخش مربوط به دریافت Context را حذف کنید.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
۱۳۹۳/۰۸/۰۵, ۰۶:۵۳ ب.ظ (آخرین تغییر در ارسال: ۱۳۹۳/۰۸/۰۶, ۱۰:۵۵ ق.ظ توسط admin.)
من فکر میکنم در این کد نیاز به تشخیص اکتیویتی است تا کد در آن اجرا شود:
کد:
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
________________________________________________________________
nDialog = new ProgressDialog(MainActivity.this);
امکانش است که بشود بهجای MainActivity، اکتیوتی که نیاز به نمایش پیغام است به صورت خودکار یا دستی انتخاب شود؟
من برنامه نویسی اندروید را تازه شروع کردهام؛ اگر میشود کمی بیشتر راهنمایی کنید.
با تشکر
۱۳۹۳/۰۸/۰۶, ۱۰:۵۸ ق.ظ (آخرین تغییر در ارسال: ۱۳۹۳/۰۸/۰۶, ۱۰:۵۹ ق.ظ توسط admin.)
بله برخی کدها نیاز به شناسایی Activity دارند و در این مواقع، با ارسال Context مربوط به Activity به آن کلاس (class)، با استفاده از Context می تواند آن Activity را شناسایی کند.
من طی یکی دو روز آینده، یک مبحث در این مورد می نویسم تا دقیقا متوجه شوید که کدنویسی باید به چه صورت باشد. هر وقت آماده شد، لینک آن را در همین موضوع قرار می دهم.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
که در مورد اجرای متعدد یک سری کد در Activity های مختلف با استفاده از یک کلاس (class) کمکتون میکنه. در مورد شناسایی Activity نیز در انتهای همان کلید، توضیحاتی داده شده است. سعی کردم با حوصله مبحث نوشته شود تا تمامی موارد مهم در آن ذکر شود.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
که در آن، به جای startActivity ، عبارت context.startActivity را نوشته ایم.
همچنین کد زیر را در نظر بگیرید :
کد:
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
باید به کد زیر تبدیل شود :
کد:
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
که در آن، به جای getSystemService ، عبارت context.getSystemService را نوشته ایم، همچنین به جای Context ، عبارت context را نوشته ایم.
در واقع در چگونگی اشاره به Context متناظر با Activity مشکل داشتند.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
۱۳۹۳/۰۸/۰۹, ۰۵:۲۷ ب.ظ (آخرین تغییر در ارسال: ۱۳۹۳/۰۸/۰۹, ۰۵:۲۷ ب.ظ توسط admin.)
در ضمن، برخی از روش ها، به جای Context مربوط به Activity ، با Context مربوط به Application سر و کار دارند. در این مورد، می توانید کلید زیر را بخوانید :
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
۱۳۹۳/۰۸/۰۹, ۰۶:۵۱ ب.ظ (آخرین تغییر در ارسال: ۱۳۹۳/۰۸/۰۹, ۰۷:۰۴ ب.ظ توسط admin.)
قبل از توضیحات جدید ابتدا چند نکته را تذکر بدم :
1- چند ارسال را حذف یا تصحیح کردم چون راهنمایی آنها غلط بود.
2- دو حالت private و public تفاوتی در این حالت نداشتند.
3- لطفا در صفحه اصلی انجمن، در ابتدای صفحه، راهنما در مورد صحیح نوشتن کدها در ارسال را بخوانید و با آن شیوه کدها را در ارسال ها بنویسید (کدهاتون به هم ریخته هستند و خوندنشون واقعا سخته).
4- بنده یک پروژه اندروید ساختم تا خودم مشکلات را بررسی کنم. کدهای کلاس را به صورت زیر نوشتم (نام کلاس من با مال شما فرق دارد، مراقب این تفاوت ها باشید) :
public MyClass (Context context) {
this.context = context;
}
public void ShowAlertDialog() {
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this.context);
alertDialog.setTitle("string");
alertDialog.setMessage("string");
alertDialog.setIcon(R.drawable.ic_launcher);
// Setting Positive "Yes" Button
alertDialog.setPositiveButton("string",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
new NetCheck().execute();
}
});
// Setting Negative "NO" Button
alertDialog.setNegativeButton("string",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// Write your code here to invoke NO event
dialog.cancel();
}
});
// Showing Alert Message
alertDialog.show();
}
public class NetCheck extends AsyncTask<String,String,Boolean>
{
/**
* Gets current device state and checks for working internet connection by trying .
**/
@Override
protected Boolean doInBackground(String... args){
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni == null) {
ShowAlertDialog();
return false;
} else
context.startActivity(new Intent(context, MyActivity.class));
return true;
}
}
}
در این حالت برنامه eclipse هیچ پیام خطایی نمایش نمی دهد. با توجه به اینکه خیلی گرفتارم، اجرا کردن برنامه اندروید را به عهده خودتان می گذارم. اگر بازم مشکلی بود، این بار به طور صحیح، کدهای کلاس و همچنین چگونگی اجرا کردن آن در Activity را در ارسالتان قرار بدهید تا بررسی کنم (لطفا کدها را با همان روشی که عرض کردم در ارسال قرار بدهید).
در ارسال های قبلی (آنهایی که حذف کردم) کمی شتاب زده پاسخ دادم که به این دلیل بود که همزمان در حال بررسی نرم افزاری دیگر بودم (حسابی فکرم مشغول بود) و نمی توانستم کدها را به طور دقیق تست کنم، به هر حال امیدوارم مشکلتان با این ارسال دیگر حل بشود.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
۱۳۹۳/۰۸/۱۰, ۱۲:۰۴ ق.ظ (آخرین تغییر در ارسال: ۱۳۹۳/۰۸/۱۰, ۱۲:۰۸ ق.ظ توسط admin.)
من کدهایتان را در پروژه اندروید تست کردم (این بار برای اینکه ببینم درست اتصال اینترنت رو تشخیص میده یا نه). با مواردی که مورد بحث ما بود، مشکلی نداشت و در حالتی هم که به اینترنت متصل بودیم، درست کار می کرد، اما برای حالتی که من گوشیم را از شبکه wireless قطع می کردم، برنامه force close می داد. چون کدها شبیه کدهایی بود که من در سایت قرار داده بودم، قبلا فکر می کردم که عینا آنها را در پروژه اندروید خود قرار داده اید، اما اینگونه نبود و با تغییر دادن آنها، مشکلاتی به وجود آمده بود. بنابراین بنده بر اساس کلید زیر، کدها را تکمیل کردم :
بنابراین بنده کل پروژه اندرویدی که ساختم و آن را در دو حالت وصل به اینترنت و عدم اتصال به اینترنت تست کرده ام را برایتان در پیوست این ارسال قرار دادم تا خودتان کدهای آن را بررسی کنید (نحوه اجرای کدهای آن مشخص است). فایل apk ساخته شده از آن را هم پیوست کرده ام.
اما بد نیست که خود کدها رو هم اینجا بنویسم :
کدهای کلاس (نام آن با کلاس شما فرق دارد) :
nDialog.show();
}
/**
* Gets current device state and checks for working internet connection by trying Google.
**/
@Override
protected Boolean doInBackground(String... args){
MyClass myClass = new MyClass(this);
myClass.CheckInternet();
}
}
کدها را با دقت بررسی کنید. همچنین برنامه اندروید را هم در دو حالت اتصال و عدم اتصال به اینترنت چک کنید.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
۱۳۹۳/۱۰/۰۶, ۰۳:۲۷ ب.ظ (آخرین تغییر در ارسال: ۱۳۹۳/۱۰/۰۶, ۰۵:۴۰ ب.ظ توسط admin.)
در کدی که قرار دادید، در صورت اتصال دستگاه به اینترنت MyActivity اجرا میشود. اگر بخواهیم که در هر اکتیویتی که اتصال به اینترنت بررسی میشود این خط از کد تغییر کند و اکتیویتی مورد نظر ما اجرا شود، چه باید کرد؟ ( برای مثال با باز نمودن هر اکتیویتی، در صورت برقراری ارتباط با اینترنت خود اکتیویتی اجرا شود)
با تشکر از شما بابت وقتی که صرف پاسخ دادن میکنید
۱۳۹۳/۱۰/۰۶, ۰۵:۴۴ ب.ظ (آخرین تغییر در ارسال: ۱۳۹۳/۱۰/۰۶, ۰۵:۵۲ ب.ظ توسط admin.)
(۱۳۹۳/۱۰/۰۶, ۰۳:۲۷ ب.ظ)'ramtin2080' نوشته: در کدی که قرار دادید، در صورت اتصال دستگاه به اینترنت MyActivity اجرا میشود. اگر بخواهیم که در هر اکتیویتی که اتصال به اینترنت بررسی میشود این خط از کد تغییر کند و اکتیویتی مورد نظر ما اجرا شود، چه باید کرد؟ ( برای مثال با باز نمودن هر اکتیویتی، در صورت برقراری ارتباط با اینترنت خود اکتیویتی اجرا شود)
با تشکر از شما بابت وقتی که صرف پاسخ دادن میکنید
کد مورد نظر را با توجه به آنچه شما خواسته بودید (کدی که گذاشتید)، نوشتم. یعنی شما می خواستید (بر اساس کد اولیه شما می گویم) که چک شود که اینترنت متصل است یا نه، اگر متصل بود، به Activity دیگری منتقل شود (اگر هم متصل نبود که یک Dialog نمایش داده شود). اکنون اگر شما هدفتان تنها چک کردن اتصال به اینترنت است، آن خط از کدها را حذف کنید تا تنها یک پیام کوتاه با Toast نمایش داده شود (در صورت اتصال به اینترنت) و در همان Activity باقی بمانید.
اگر هم حتما باید به Activity های مختلف بروید، می توانید نام Activity بعدی را به آن ارسال کنید (یک ورودی بر اساس نام Activity بعدی دریافت می کند).
اصولی تر این است که ابتدای اجرای هر Activity ، چک کنید که کاربر به اینترنت متصل است یا نه، اگر متصل نبود که پیامی نمایش داده شود و ادامه کدهای Activity اجرا نشوند، اگرهم متصل بود که کدهای Activity اجرا می شوند. مثلا می توانید تعیین کنید که اتصال به اینترنت چک شود و کلاس (class) مورد نظر، یک متغیر boolean را برگرداند که اگر true بود، کدهای Activity اجرا شوند.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
۱۳۹۳/۱۰/۰۶, ۰۸:۳۲ ب.ظ (آخرین تغییر در ارسال: ۱۳۹۳/۱۰/۰۶, ۰۸:۳۲ ب.ظ توسط admin.)
(۱۳۹۳/۱۰/۰۶, ۰۷:۱۷ ب.ظ)'ramtin2080' نوشته: در مورد ارسال نام Activity بعد میشود بیشتر توضیح دهید؟
با خواندن کلید زیر، متوجه می شوید که چگونه یک مقدار (ورودی برای کلاس) را به یک کلاس (Class) ارسال کنید (نام Activity را به صورت رشته (String) به کلاس مورد نظر ارسال می کنید) :
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
سلام
پیرامون پاسخهای دوستمان میخواستم بپرسم که اگر بخواهیم علاوه بر اینکه اتصال به اینترنت در ابتدای کار بررسی شود، در حین استفاده از سایت آورده شده بوسیله وب ویو مثلا وقتی بروی لینک دیگری از سایت کلیک میکنیم اگر اینترنت قطع شود پیام بیاید(مانند اپلیکیشن سایت کلیدستان)، همچنین اگر بخواهیم بدون اینکه حتی کلیک بکنیم با قطع شدن اتصال پیام بیاید باید چکار کنیم؟