انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در ایجاد تایمر برای انجام یک کار در تاریخ و ساعت مشخص (برنامه نویسی اندروید)

مشکل در ایجاد تایمر برای انجام یک کار در تاریخ و ساعت مشخص (برنامه نویسی اندروید)

#13
اگه هنوز جواب نگرفتید بیاید از این سناریو استفاده کنید

یک کلاس جدید بسازید که از Service. Extend بشه و یک سرویس رو بسازید

در کلاس BroadCastReceiver بجای فعال کردن AlarmManager بیاید و Service جدید و start کنید
که در واقع سرویس بیاد و کارای مربوط به AlarmManager رو برای شما انجام بده

کدهای مربوط به MyBroadCastReceiver 

کد:
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.widget.Toast;


public class MyBroadCastReceiver extends BroadcastReceiver{

   @Override
   public void onReceive(Context context, Intent intent)
   {
       PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
       PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "");
       wl.acquire();

       // Put here YOUR code.
       Toast.makeText(context, "Alarm !!!!!!!!!!", Toast.LENGTH_LONG).show(); // For example
       SetAlarm(context);

       wl.release();
   }

   public void SetAlarm(Context context)
   {
       AlarmManager am =( AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
       Intent i = new Intent(context, MyBroadCastReceiver.class);
       PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
       am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 1000 * 10, pi); // Millisec * Second * Minute
   }

}

کدهای مربوط به MyService

کد:
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.support.annotation.Nullable;


public class Myservice extends Service {

   MyBroadCastReceiver myBroadCastReceiver = new MyBroadCastReceiver();

   public void onCreate() {
       super.onCreate();
   }

   @Override
   public int onStartCommand(Intent intent, int flags, int startId) {
       myBroadCastReceiver.SetAlarm(this);
       return START_STICKY;
   }

   @Override
   public void onStart(Intent intent, int startId) {
       myBroadCastReceiver.SetAlarm(this);
   }

   @Override
   public IBinder onBind(Intent intent) {
       return null;
   }
}

کدهای فایل AndroidManifest

کد:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.example.mahdi.alarmmanager"
         xmlns:android="http://schemas.android.com/apk/res/android">

   <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
   <uses-permission android:name="android.permission.WAKE_LOCK"/>


   <application
       android:allowBackup="true"
       android:icon="@mipmap/ic_launcher"
       android:label="@string/app_name"
       android:supportsRtl="true"
       android:theme="@style/AppTheme">

       <receiver android:name=".MyBroadCastReceiver"
           android:enabled="true"
           android:exported="false">
           <intent-filter>
               <action android:name="android.intent.action.BOOT_COMPLETED"/>
           </intent-filter>
       </receiver>

       <service android:name=".Myservice"
           android:enabled="true">

       </service>
       <activity android:name=".MainActivity">
           <intent-filter>
               <action android:name="android.intent.action.MAIN"/>

               <category android:name="android.intent.category.LAUNCHER"/>
           </intent-filter>
       </activity>
   </application>

</manifest>

با این روش بدون نیاز به اجرای برنامه . دقیقا بعد از Boot شدن device پیغام آلارم داده میشه و دوباره تنظیم میشه برای آلارم بعدی.
BroadCastReceiver و Service هر دو فعال هستند.
Alarm  برو روی 10 ثانیه تنظیم شده.
پاسخ
 سپاس شده توسط msh ، admin


پیام‌های این موضوع
RE: مشکل در ایجاد تایمر برای انجام یک کار در تاریخ و ساعت مشخص - توسط mahdi10539 - ۱۳۹۴/۱۱/۰۹, ۱۲:۰۷ ب.ظ

پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان