অ্যান্ড্রয়েড: অ্যালার্ম ম্যানেজার কীভাবে ব্যবহার করবেন


90

AlarmManagerসেট হওয়া থেকে 20 মিনিটের পরে আমাকে কোডের একটি ব্লক ট্রিগার করতে হবে ।

Someone AlarmManagerঅ্যান্ড্রয়েড-এ কোনও কীভাবে ব্যবহার করতে হয় সে সম্পর্কে কেউ আমাকে নমুনা কোড দেখাতে পারেন ?

আমি কয়েক দিন ধরে কিছু কোড নিয়ে খেলছি এবং এটি কার্যকর হবে না।

উত্তর:


110

"কিছু নমুনা কোড" এলেই এটি সহজ হয় না AlarmManager

এখানে সেটআপ দেখানো একটি স্নিপেট রয়েছে AlarmManager:

AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);

mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);

এই উদাহরণে, আমি ব্যবহার করছি setRepeating()। আপনি যদি একটি শট অ্যালার্ম চান তবে আপনি কেবল ব্যবহার করবেন set()। আপনি যেমন প্রাথমিক প্যারামিটারে ব্যবহার করেন তেমন সময় বেসে অ্যালার্ম শুরু হওয়ার সময় দেওয়ার বিষয়ে নিশ্চিত হন set()। উপরের আমার উদাহরণে, আমি ব্যবহার করছি AlarmManager.ELAPSED_REALTIME_WAKEUP, তাই আমার সময় ভিত্তি SystemClock.elapsedRealtime()

এই কৌশলটি দেখানো এখানে একটি বৃহত্তর নমুনা প্রকল্প


4
আবারো স্বাগতম. জবাবের জন্য ধন্যবাদ. আমি যদি আপনার বইটি কিনে থাকি তবে কীভাবে এটি একটি বিশদ বিবরণ ব্যবস্থাপককে পুরো বিশদভাবে বাস্তবায়ন করবেন তা ব্যাখ্যা করে?
টম

7
অ্যাডভান্সড অ্যান্ড্রয়েড বইতে (সংস্করণ 0.9) অ্যালার্ম ম্যানেজার, ওয়েকলকস এবং সেই উদাহরণটির বাকী। 9 পৃষ্ঠাগুলি রয়েছে। আমি উপরে আমার উত্তরে উল্লিখিত ফিক্স তৈরি করার সাথে এটি সম্ভবত সংস্করণ 1.0 এ সামান্য প্রসারিত হবে। এবং যদি আপনার কাছে বই বা এর নমুনা কোড সম্পর্কিত প্রশ্ন থাকে, গ্রুপ. google.com/group/cw-android এ যান এবং আমি তাদের উত্তর দিতে পেরে খুশি হব।
কমন্সওয়্যার

17
যে কোনও অ্যান্ড্রয়েড বিকাশকারীকে মার্কের বইয়ের সাবস্ক্রিপশন থাকতে হবে :) কমপক্ষে একবার
বোস্টোন

4
@ মারিওগ্যালভেন: আপনার অ্যাপ্লিকেশনটি প্রথমবারের জন্য চালানো এবং পুনরায় বুট করার সময় আপনাকে এটি সেট করতে হবে।
কমন্সওয়েয়ার

আমি মনে করি আপনি যদি এখনই এটি চালিয়ে যেতে চান এবং তারপরে প্রতিটি PERIOD ব্যবহার করতে চান তবে আপনার অবশ্যই অ্যালার্ম ম্যানেজ.আরটিসি_ওয়াকআপ ব্যবহার করা উচিত। আপনার কোডে এটি সিস্টেমক্লক.এলপসড রিলটাইম () এবং তারপরে প্রতিটি পিরিওডের পরে চালু হবে।
দামন ইউয়ান

66

অ্যান্ড্রয়েড নমুনা কোডে কিছু ভাল উদাহরণ রয়েছে

যেগুলি যাচাই করতে হবে তা হ'ল:

  • AlarmController.java
  • ওয়ানশট অ্যালার্ম.জভা

প্রথমত, আপনার একটি রিসিভার দরকার, এমন কিছু যা ট্রিগার হওয়ার সাথে সাথে আপনার অ্যালার্মটি শুনতে পারে। আপনার AndroidManLive.xML ফাইলে নিম্নলিখিতগুলি যুক্ত করুন

<receiver android:name=".MyAlarmReceiver" />

তারপরে, নিম্নলিখিত ক্লাসটি তৈরি করুন

public class MyAlarmReceiver extends BroadcastReceiver { 
     @Override
     public void onReceive(Context context, Intent intent) {
         Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show();
     }
}

তারপরে, অ্যালার্মকে ট্রিগার করতে নিম্নলিখিতটি ব্যবহার করুন (উদাহরণস্বরূপ আপনার মূল ক্রিয়াকলাপে):

AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, MyAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, 30);
alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);


অথবা, আরও ভাল, এমন একটি শ্রেণি তৈরি করুন যা এগুলি সব পরিচালনা করে এবং এটি ব্যবহার করে

Bundle bundle = new Bundle();
// add extras here..
MyAlarm alarm = new MyAlarm(this, bundle, 30);

এইভাবে, আপনার সমস্ত কিছু এক জায়গায় (সম্পাদনা করতে ভুলবেন না AndroidManifest.xml)

public class MyAlarm extends BroadcastReceiver {
    private final String REMINDER_BUNDLE = "MyReminderBundle"; 

    // this constructor is called by the alarm manager.
    public MyAlarm(){ }

    // you can use this constructor to create the alarm. 
    //  Just pass in the main activity as the context, 
    //  any extras you'd like to get later when triggered 
    //  and the timeout
     public MyAlarm(Context context, Bundle extras, int timeoutInSeconds){
         AlarmManager alarmMgr = 
             (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
         Intent intent = new Intent(context, MyAlarm.class);
         intent.putExtra(REMINDER_BUNDLE, extras);
         PendingIntent pendingIntent =
             PendingIntent.getBroadcast(context, 0, intent, 
             PendingIntent.FLAG_UPDATE_CURRENT);
         Calendar time = Calendar.getInstance();
         time.setTimeInMillis(System.currentTimeMillis());
         time.add(Calendar.SECOND, timeoutInSeconds);
         alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(),
                      pendingIntent);
     }

      @Override
     public void onReceive(Context context, Intent intent) {
         // here you can get the extras you passed in when creating the alarm
         //intent.getBundleExtra(REMINDER_BUNDLE));

         Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show();
     }
}

4
হাই! আমি এই কোডটি পরীক্ষা করেছি এবং এটি জরিমানা (+1) এর চেয়ে খারাপ। তবে আমি এটি একাধিক অ্যালার্মের জন্য চেষ্টা করেছি (যেমন একটি 10 ​​সেকোনের জন্য এবং অন্যটি 15 জনের জন্য, এবং কেবল সেন্সন্ডকে বরখাস্ত করা হয়েছে I আমি কি ভুল করছি, বা এটি কোনও সমস্যার রাজা? সম্পাদনা: ঠিক আছে, আমি সমস্যাটি এখানে পেয়েছি : স্ট্যাকওভারফ্লো.com
নুনো

এফডাব্লুআইডাব্লু, আমি এর জন্য কনস্ট্রাক্টরের চেয়ে স্থির পদ্ধতি ব্যবহার করব use
এডওয়ার্ড ফ্যাল্ক

9

আপনাকে যা করতে হবে তা হ'ল প্রথমে আপনার নির্ধারিত উদ্দেশ্যটি তৈরি করা। তারপরে সেই অভিপ্রায়টির মুলতুবি থাকা পান। আপনি ক্রিয়াকলাপ, পরিষেবা এবং সম্প্রচারের সময়সূচী করতে পারেন। কোনও ক্রিয়াকলাপ নির্ধারণের জন্য যেমন MyActivity:

  Intent i = new Intent(getApplicationContext(), MyActivity.class);
  PendingIntent pi = PendingIntent.getActivity(getApplicationContext(),3333,i,
  PendingIntent.FLAG_CANCEL_CURRENT);

এই মুলতুবি ইন্টেন্টটি অ্যালার্ম ম্যানেজারকে দিন:

  //getting current time and add 5 seconds in it
  Calendar cal = Calendar.getInstance();
  cal.add(Calendar.SECOND, 5);
  //registering our pending intent with alarmmanager
  AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
  am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(), pi);

অ্যাপ্লিকেশন প্রবর্তনের 5 সেকেন্ডের পরে এখন মাইএকটিভিটি চালু করা হবে , আপনি আপনার অ্যাপ্লিকেশন বা ডিভাইসটি স্লিপ অবস্থায় চলে যান না কেন (আরটিসি_ওয়াকইউপি বিকল্পের কারণে)। আপনি সম্পূর্ণ উদাহরণ কোড নির্ধারণ কার্যক্রম, পরিষেবা এবং সম্প্রচার # অ্যান্ড্রয়েড পড়তে পারেন


+1 দুর্দান্ত উত্তর, আমার ঠিক কী প্রয়োজন, একটি ওয়ার্কিং 'সেট' উদাহরণ।
এ.আলকাদোমি

4

আমি মন্তব্য করতে চেয়েছিলাম তবে <50 রেপ, তাই এখানে যায়। বন্ধুত্বপূর্ণ অনুস্মারক যে আপনি যদি 5.1 বা তার বেশি বা তার উপর চলতে থাকেন এবং আপনি যদি এক মিনিটেরও কম ব্যবধান ব্যবহার করেন তবে তা ঘটে:

Suspiciously short interval 5000 millis; expanding to 60 seconds

এখানে দেখুন ।


3

আপনি যখন অ্যালার্ম ম্যানেজার থেকে কোনও পরিষেবা কল করতে চান তখন কিছু নমুনা কোড:

PendingIntent pi;
AlarmManager mgr;
mgr = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(DataCollectionActivity.this, HUJIDataCollectionService.class);    
pi = PendingIntent.getService(DataCollectionActivity.this, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() , 1000, pi);

আপনাকে ব্যবহারকারীর কাছে জিজ্ঞাসা করতে হবে না।


একটি খুব সাধারণ সংক্ষেপণ।
ফ্যান্টাম্যাক্সএক্সএক্স

0

একটি অ্যালার্ম ম্যানেজার একটি নির্দিষ্ট সময়ে কিছু কোড ট্রিগার করতে ব্যবহৃত হয়।

একটি অ্যালার্ম ম্যানেজার শুরু করার জন্য আপনাকে প্রথমে সিস্টেমের থেকে উদাহরণটি পাওয়া উচিত। তারপরে পেন্ডিং ইন্টেন্টটি পাস করুন যা আপনার নির্দিষ্ট ভবিষ্যতে কার্যকর হবে

AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

Intent alarmIntent = new Intent(context, MyAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
int interval = 8000; //repeat interval
manager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), interval, pendingIntent);

অ্যালার্ম ম্যানেজার ব্যবহার করার সময় আপনাকে সতর্কতা অবলম্বন করা উচিত। সাধারণত, অ্যালার্ম ম্যানেজার এক মিনিটের আগে পুনরাবৃত্তি করতে পারে না। লো পাওয়ার মোডেও সময়কাল 15 মিনিট পর্যন্ত বাড়তে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.