Notification و Alarm Manager در اندروید
دارالترجمه رسمی
دارالترجمه رسمی پارسیس شامل خدمات ترجمه رسمی و تخصصی در بیش از 60 زبان زنده دنیا
دارالترجمه رسمی پارسیس شامل خدمات ترجمه رسمی و تخصصی در بیش از 60 زبان زنده دنیا
افزونه های سئو وردپرس
بهترین افزونه های سئو وردپرس به صورت کاملا فارسی
بهترین افزونه های سئو وردپرس به صورت کاملا فارسی
افزونه فرم ساز آسان
فرم ساز آسان اولین فرم ساز کاملا فارسی وردپرس
فرم ساز آسان اولین فرم ساز کاملا فارسی وردپرس
خرید ورق گالوانیزه رنگی
خرید انواع ورق گالوانیزه رنگی با بهترین قیمت
خرید انواع ورق گالوانیزه رنگی با بهترین قیمت
کارگاه رویه کوبی در تهران
بهترین کارگاه رویه کوبی و تعمیر مبل راحتی و استیل در تهران با قیمت و کیفیت عالی
خودتان را اینجا معرفی کنید
بهترین کارگاه رویه کوبی و تعمیر مبل راحتی و استیل در تهران با قیمت و کیفیت عالی
Notification در اندروید
- محتوای عنوان
- آیکن بزرگ
- محتوای متنی
- محتوای داخلی
- آیکن کوچک
- زمانی که Notification نمایش داده شود
ابتدا باید اطلاعات و عملیات را در شی NotificationCompat.Builder مشخص کنیم تا بتوانیم Notification را بسازیم، سپس میتوانیم ()NotificationCompat.Builder.build را صدا بزنیم که یک شی دارای اطلاعات ما را برمیگرداند، همچنین میتوانیم برای پاس دادن Notification به سیستم از شی NotificationManager.notify() استفاده کنیم.
یک شی Notification باید دارای موارد زیر باشد :
- یک آیکن کوچک، که توسط ()setSmallIcon نمایش داده میشود.
- یک عنوان که توسط ()setContentTitle نمایش داده میشود.
- یک محتوای متنی که توسط ()setContentText نمایش داده میشود.
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!");
// Creates an explicit intent for an Activity in your app
Intent resultIntent = new Intent(this, ResultActivity.class);
// The stack builder object will contain an artificial back stack for the
// started Activity.
// This ensures that navigating backward from the Activity leads out of
// your application to the Home screen.
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
// Adds the back stack for the Intent (but not the Intent itself)
stackBuilder.addParentStack(ResultActivity.class);
// Adds the Intent that starts the Activity to the top of the stack
stackBuilder.addNextIntent(resultIntent);
PendingIntent resultPendingIntent =
stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// mId allows you to update the notification later on.
mNotificationManager.notify(mId, mBuilder.build());
حذف یا غیرفعال کردن Notification :Notification باقی میماند تا زمانی که :
- کاربر از طریق دکمه ی Clear گوشی یا توسط انگشت خود Notification را از بین ببرد.
- شما متد ()cancel را برای Notification ID های خاصی فراخوانی کنید.
- شما متد ()cancelAll را برای تمام Notification ها فراخوانی کنید.
Alarm Manager در اندروید
گاهی اوقات میخواهیم که بعضی از عملیات ها در زمان دیرتری اتفاق بیوفتند، برای مثال در زمان بندی SMS میخواهیم یک SMS چند ساعت بعد ارسال شود یا برای مثال برنامه های To-Do List که میخواهیم یک اخطار بعدا به ما داده شود، کلاس AlarmManager دسترسی ما را به سیستم های Alarm فراهم میکند، این کار باعث میشود بتوانید عملیات مورد نظرتان در زمانی که میخواهید انجام دهید.Alarm Manager بخشی از CPU را اشغال میکند و تا زمانی که متد ()onRecieve فعال است، آن بخش از CPU را اشغال میکند.
با یک مثال مناسب به بررسی این موضوع میپردازیم، در این مثال با یک زمان بندی یک SMS را در زمان مشخصی ارسال میکنیم، نیاز به دو کلاس داریم :
- کلاس MainActivity : در این کلاس برنامه آلارم را در یک زمان خاص مشخص میکنیم.
- کلاس AlarmReciever : زمانی که آلارم زده شد، برنامه یک SMS را در زمان خاص ارسال میکند.کلاس AlarmReciever از کلاس BroadcastReceiver مشتق میشود و متد ()onRecieve در آن override میشود و درون آن میتوانید یک Activity یا Service را بنابه نیاز خود اجرا کنید.
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
در نهایت فایل Manifest ما باید به صورت زیر شود :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.learnandroideasily.blogspot"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8"
android:targetSdkVersion="17" />
<!-- permission required to use Alarm Manager -->
<uses-permission android:name="com.android.alarm.permission.SET_ALARM"/>
<!-- permission required to Send SMS -->
<uses-permission android:name="android.permission.SEND_SMS"/>
<application
android:icon="@drawable/ic_launcher"
android:label="Demo App" >
<activity
android:name=".MainActivity"
android:label="Demo App" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Register the Alarm Receiver -->
<receiver android:name=".AlarmReciever"/>
</application>
</manifest>
همچنین فایل main.xml را باید طراحی کنیم، طراحی این فایل دلخواه میباشد اما میتوانید مطابق به لایه بندی زیر آن را طراحی کنید :
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:gravity="center_vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/textView1"
android:gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Alarm Manager Example"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button1"
android:layout_marginTop="25dp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Schedule The Alarm"
android:onClick="scheduleAlarm"/>
</LinearLayout>
همچنین در کلاس MainActivity.java فعالیت هایی که مدنظر داشتیم را انجام میدهیم :
public class MainActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
public void scheduleAlarm(View V)
{
// time at which alarm will be scheduled here alarm is scheduled at 1 day from current time,
// we fetch the current time in milliseconds and added 1 day time
// i.e. 24*60*60*1000= 86,400,000 milliseconds in a day
Long time = new GregorianCalendar().getTimeInMillis()+24*60*60*1000;
// create an Intent and set the class which will execute when Alarm triggers, here we have
// given AlarmReciever in the Intent, the onRecieve() method of this class will execute when
// alarm triggers and
//we will write the code to send SMS inside onRecieve() method pf Alarmreciever class
Intent intentAlarm = new Intent(this, AlarmReciever.class);
// create the object
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
//set the alarm for particular time
alarmManager.set(AlarmManager.RTC_WAKEUP,time, PendingIntent.getBroadcast(this,1, intentAlarm, PendingIntent.FLAG_UPDATE_CURRENT));
Toast.makeText(this, "Alarm Scheduled for Tommrrow", Toast.LENGTH_LONG).show();
}
}
و در نهایت در کلاس AlarmReciever.java پیامک را در زمان مورد نظر ارسال میکنیم :
public class AlarmReciever extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
// here you can start an activity or service depending on your need
// for ex you can start an activity to vibrate phone or to ring the phone
String phoneNumberReciver="9718202185";// phone number to which SMS to be send
String message="Hi I will be there later, See You soon";// message to send
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumberReciver, null, message, null, null);
// Show the toast like in above screen shot
Toast.makeText(context, "Alarm Triggered and SMS Sent", Toast.LENGTH_LONG).show();
}
}
نظرات و سوالات کاربران
سلام. ممنون بابت آموزش. چندتا سوال دارم:
1. من به جای برودکست از سرویس استفاده کردم. به نظرتون چه فرقی می کنه؟
2. استفاده از آلارم منیجر بیشتر باتری مصرف می کنه با استفاده از handler و time برای انجام کاری در آینده؟
3. چرا آلارم منیجر با این که در اکتیویتی نوشته می شه باز هم بعد از خروج از برنامه در حال فعالیت هست؟
4. من یک آلارم منیجیر نوشتم که بعد از مثلا 100 ثانیه یک سرویس رو اجرا می کنه و یک دکمه گذاشتم به نام stop که وقتی روش کلیک می شه آلارم منیجر متناسب با همون pendingintent کنسل بشه و سرویس هم stop بشه. وقتی توی برنامه آلارم منیجر رو راه می ندازم و بعد که دکمه stop رو می زنم عملیات متوقف می شه اما وقتی که آلارم منیجر رو راه می ندازم و بعد از برنامه خارج می شم و دوباره وارد برنامه می شم و stop رو می زنم آلارم منیجر متوقف نمی شه. دلیلش چیه؟ چیکار کنم؟
5. از کجا بفهمم که یک سرویس و یک آلارم منیجر در حال فعالیت هستند؟