آموزش ساده نصب شبیه ساز اندروید Genymotion
1395/10/22

آموزش زامارین،کار با سوئیچ
1395/09/06

استفاده آسان از Google reCaptcha در کد phpجهت جلوگیری از اسپم
1395/08/08

کار با JSON در اندروید
1395/08/02

وارد کردن اطلاعات از Excel به مای اس کیو ال با PHP
1395/07/24

کار با notification + سورس


رضا نقی لو 1395/01/21

به نام خدا،در این جلسه از سری آموزش های برنامه نویسی اندروید در محیط زاماین امروز میخواهیم با نوتیفیکیشن  notification ها اشنا بشیم.notification یک ابزار برای نمایش اعلانات سیستم  و برنامه های نصب شده بر روی گوشی های هوشمند می باشد.این آموزش به صورت کامل ما را با نحوه استفاده از notification  در زامارین آشنا خواهد کرد.

برای شروع کار یک پروژه جدید ایجاد میکنم (با ایجاد برنامه جدید زامارین در این آموزش آشنا شدیم).نحوه کار برنامه ما به این صورت خواهد بود که در هنگام کلیک بر روی دکمه یک ییام در notification گوشی به نمایش در خواهد آمد و با کلیک بر روی پیام notification  به یک اکتیوتی جدید حرکت خواهیم کرد.در ابتدا باید یک اکتیویتی جدید ایجاد می کنیم تا بتوانیم مقادیری رو بهش ارسال کنیم.برای اینکار به این آموزش مراجعه کنید.در اکتیویتی جدید تنها نیاز داریم از یک تکست ویو TEXTVIEW استفاده کنیم تا زمانی که بر روی notification  کلیک شد متن وجود در اکتیویتی اول نمایش داده شود.

در ادامه کلاس MainActivity.cs رو اجرا کرده و کدهای زیر رو بهش اضافه می کنیم. در داخل این کلاس خود محیط زامارین به صورت پیشفرض برای دکمه موجود Button یک رویداد کلیک  button.Click += ButtonOnClick در نظر گرفته است ما در کلاس این رویداد برای نمایش notification و ارسال اطلاعات از اکتیویتی اول به دوم استفاده خواهیم کرد.دستور Bundle وظیفه این رو داره که اطلاعات موجود در دکمه  رو بگیره و در اکتیویتی دوم نمایش بده.در ادامه برای اینکه به اکتیویتی دوم  بریم باید از یک Intent استفاده کنیم.

در قدم بعدی یک PendingIntent ایجاد می کنیم تا اطلاعات دریافتی از اکتیویتی  اول رو به  اکتیویتی دوم واگذار کنه.برای اینکه با PendingIntent بیشتر آشنا بشیم به این توضیحات دقت کنید.PendingIntent ترکیبی از درخواست عملیات (اجرای اکتیویتی،سرویس یا ارسال یک broadcast)،جزییات عملیات(در قالب یک intent) و یک context است. نمونه ایجاد شده می تواند به سایر برنامه های کاربردی واگذار گردد تا با کمک آنها حتی پس از اتمام برنامه ایجاد کننده pendingintent،عملیاتی انجام شود. همچنین PendingIntent دارای flag هایی است که عملکرد آنرا بسته به اینکه نمونه ای از آن pendingintent از قبل وجود داشته یا خیر،کنترل می کند. نقش context در ساختار PendingIntent یک نقش امنیتی است به این معنی که اندروید فقط با مجموعه مجوزهای امنیتی همان context اقدام به اعمال pendingintent می کند.در نتیجه یک pendingintent نمی تواند در خواست دسترسی به سطوح امنیتی را داشته باشد که context آن فاقد مجوز لازم است. با ارسال یک pendingintent به یک برنامه کاربردی دیگر،شما به آن برنامه حق استفاده از مجوزهای برنامه خود را اعطا می کنید.(برعکس intent ها که برنامه مقصد اگر بخواهد عملیاتی را انجام دهد با استفاده از مجوزهای خود اقدام خواهد کرد)بنابراین در هنگام استفاده از آن باید کاملا احتیاط کرد تا ناخواسته این مجوزها به برنامه دیگری اعطا نشود.(منبع stackoverflow)

در قدم بعدی میرسیم به دستور NotificationCompat که شروع کار notification  است.دستور SetAutoCancel یک مقدار  true,false میگیره که در هنگام true بودن در صورت کلیک کاربر بر روی notification.نوتیفیکیشن بسته می شود.دستور SetContentIntent شروع کار اکتیویتی.دستور SetContentText برای نمایش اطلاعات در اکتیویتی دوم.(کدهای کامل کلاس MainActivity.cs).

 namespace Notifications
{
using System;
//Appinapps.com
using Android.App;
using Android.Content;
using Android.OS;
using Android.Support.V4.App;
using Android.Widget;

using Java.Lang;

using String = System.String;

[Activity(Label = "Notifications", MainLauncher = true, Icon =  "@drawable/ic_launcher")]
public class MainActivity : Activity
{
private static readonly int ButtonClickNotificationId = 1000;

private int _count = 1;
//Appinapps.com
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);

SetContentView(Resource.Layout.Main);

Button button = FindViewById<Button>(Resource.Id.MyButton);

button.Click += ButtonOnClick;
}

private void ButtonOnClick(object sender, EventArgs eventArgs)
{
// These are the values that we want to pass to the next activity
Bundle valuesForActivity = new Bundle();
valuesForActivity.PutInt("count", _count);

// Create the PendingIntent with the back stack 
// When the user clicks the notification, SecondActivity will start up.
Intent resultIntent = new Intent(this, typeof(SecondActivity));
resultIntent.PutExtras(valuesForActivity); // Pass some values to  SecondActivity.

TaskStackBuilder stackBuilder = TaskStackBuilder.Create(this);
stackBuilder.AddParentStack(Class.FromType(typeof(SecondActivity)));
stackBuilder.AddNextIntent(resultIntent);

PendingIntent resultPendingIntent = stackBuilder.GetPendingIntent(0,  (int)PendingIntentFlags.UpdateCurrent);

// Build the notification
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.SetAutoCancel(true) // dismiss the notification from the notification area when  the user clicks on it
.SetContentIntent(resultPendingIntent) // start up this activity when the user  clicks the intent.
.SetContentTitle("Button Clicked") // Set the title
.SetNumber(_count) // Display the count in the Content Info
.SetSmallIcon(Resource.Drawable.ic_stat_button_click) // This is the icon to  display
.SetContentText(String.Format("The button has been clicked {0} times.",  _count)); // the message to display.

// Finally publish the notification
NotificationManager notificationManager =  (NotificationManager)GetSystemService(Context.NotificationService);
notificationManager.Notify(ButtonClickNotificationId, builder.Build());

_count++;
}
} //Appinapps.com

}

در کلاس SecondActivity.cs هم اطلاعاتی رو که از bundle گرفتیم رو به TextView میفرستیم تا نمایش داده بشه.(کدهای کلاس SecondActivity.cs).

 namespace Notifications
{
using System;

using Android.App;
using Android.OS;
using Android.Widget;

[Activity(Label = "Second Activity")]
public class SecondActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
int count = Intent.Extras.GetInt("count", -1);
if (count <= 0)
{
return;
}
//Appinapps.com
SetContentView(Resource.Layout.Second);
TextView txtView = FindViewById<TextView>(Resource.Id.textView1);
txtView.Text = String.Format("You clicked the button {0} times in the previous  activity.", count);
}
}
}

 

در آخر هم پیشنهاد می کنم حتما سورس آموزش رو دانلود کنید تا بهتر موضوع را درک کنید.

فایلهای ضمیمه
توجه! هیچ فایل ضمیمه ای برای این مطلب یافت نشد
درباره نویسنده
admin2
رضا نقی لو
androiddev160@gmail.com
نظرات شما
نظر جدید