اذهب إلى المحتوى

السؤال

نشر

أود إدراج خاصية التنبيه مثل تلك الموجود على المنبهات Alarm داخل تطبيق، شريطة أن يقوم التطبيق بهذه العملية كل مدة زمنية احددها أنا، مثلا كل 6 ساعات، فكيف ذلك؟

Recommended Posts

  • 0
نشر (معدل)

يحتوي هذا المثال على العديد من الامتيازات، فيما يتعلق باستعمال ذاكرة الجهاز، وكذا عدم استهلاك البطارية:

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.repeatingalarm"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.example.repeatingalarm.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

</manifest>

 

Layout.xml file:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >
 <EditText
        android:id="@+id/time"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="28dp"
        android:ems="10"
        android:hint="Number of seconds"
        android:inputType="numberDecimal" />
    <Button

        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="95dp"
        android:onClick="startAlert"
        android:text="Make repeat" />

   

</RelativeLayout>


MyBroadcastReceiver java class:

/**
 * 
 */
package com.example.repeatingalarm;

import java.util.Date;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;

/**
 * @author Prabu
 *
 */
public class MyBroadcastReceiver  extends BroadcastReceiver {
 @Override
 public void onReceive(Context context, Intent intent) {
  Toast.makeText(context, new Date().toString(),
    Toast.LENGTH_SHORT).show();
 }
}

Activity java class:

باستعمال setRepeating

package com.example.repeatingalarm;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

/**
 * @author Prabu
 *
 */
public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.activity_main, menu);
  return true;
 }

 public void startAlert(View view) {
  EditText text = (EditText) findViewById(R.id.time);
  int i = Integer.parseInt(text.getText().toString());
  Intent intent = new Intent(this, MyBroadcastReceiver.class);
  PendingIntent pendingIntent = PendingIntent.getBroadcast(
    this.getApplicationContext(), 234324243, intent, 0);
  AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
  alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
    + (i * 1000), (i * 1000), pendingIntent);
  /*alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
    + (i * 1000), 8000, pendingIntent);*/
  Toast.makeText(this, "Starting alarm in " + i + " seconds",
    Toast.LENGTH_LONG).show();
 }

}

النتيجة:

1.png

باستعمال setInexactRepeating:

package com.example.repeatingalarm;

import android.app.Activity;
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

/**
 * @author Prabu
 *
 */
public class MainActivity extends Activity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.activity_main, menu);
  return true;
 }

 public void startAlert(View view) {
  EditText text = (EditText) findViewById(R.id.time);
  int i = Integer.parseInt(text.getText().toString());
  Intent intent = new Intent(this, MyBroadcastReceiver.class);
  PendingIntent pendingIntent = PendingIntent.getBroadcast(
    this.getApplicationContext(), 234324243, intent, 0);
  AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
  /*alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
    + (i * 1000), (i * 1000), pendingIntent);*/
  alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
    + (i * 1000), 8000, pendingIntent);
  Toast.makeText(this, "Starting alarm in " + i + " seconds",
    Toast.LENGTH_LONG).show();
 }

}

النتيجة:

4.png

يمكنك تحميل المثال :RepeatingAlarm.zip

المصدر : How to make alarm repeat in Android code

تم التعديل في بواسطة E.Nourddine

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...