1

我想在一週的特定一天發送通知,我的代碼在當天工作,但每次打開智能手機/模擬器時都會收到通知。我該如何解決這個問題?啓動Android鬧鐘啓動

我的清單

<receiver android:name=".AutoStart"> 
      <intent-filter> 
       <action android:name="android.intent.action.BOOT_COMPLETED"></action> 
      </intent-filter> 
     </receiver> 
     <receiver android:name=".Alarm"></receiver> 
     <receiver android:name=".NotificationActivity"></receiver> 

AutoStart.java

public class AutoStart extends BroadcastReceiver 
{ 
    Alarm alarm = new Alarm(); 
    @Override 
    public void onReceive(Context context, Intent intent) 
    { 
     if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) 
     { 
      alarm.SetAlarm(context); 
     } 
    } 
} 

而且我Alarm.java

@SuppressLint("Wakelock") 
    public class Alarm extends BroadcastReceiver 
    {  
     static RSSFeed myRssFeed = null; 
     @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(); 

      SetAlarm(context); 

      wl.release(); 
     } 

    public void SetAlarm(Context context) 
    { 
     AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 
     Intent i = new Intent(context, NotificationActivity.class); 
     PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0); 
     Calendar calendar = new GregorianCalendar(); 
     calendar.set(Calendar.DAY_OF_WEEK, 2); 
     calendar.set(Calendar.HOUR_OF_DAY, 9); 
     calendar.set(Calendar.MINUTE, 30); 
     calendar.set(Calendar.SECOND, 0); 
     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pi); 
    } 

    public void CancelAlarm(Context context) 
    { 
     Intent intent = new Intent(context, Alarm.class); 
     PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
     AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
     alarmManager.cancel(sender); 
    } 
} 

謝謝

回答

0

因爲你已經宣佈android.intent.action .BOOT清單中的_COMPLETED權限。這意味着只要您的設備或手機重新啓動,它就會調用BroadcastReceiver。

請嘗試以下操作。 這是工作代碼。它每10分鐘喚醒一次CPU,直到電話關閉。

加入的Manifest.xml:

...

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

...

<receiver android:process=":remote" android:name="Alarm"></receiver> 

... 代碼:從

package YourPackage; 
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 Alarm 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 

     wl.release(); 
    } 

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

public void CancelAlarm(Context context) 
{ 
    Intent intent = new Intent(context, Alarm.class); 
    PendingIntent sender = PendingIntent.getBroadcast(context, 0, intent, 0); 
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.cancel(sender); 
} 
} 

設置警報服務:

package YourPackage; 
import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.os.IBinder; 

public class YourService extends Service 
{ 
Alarm alarm = new Alarm(); 
public void onCreate() 
{ 
    super.onCreate();  
} 

public void onStart(Context context,Intent intent, int startId) 
{ 
    alarm.SetAlarm(context); 
} 

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

}

+0

hiiiii ............... – 2013-03-22 14:22:13

+0

hello.Try上面的代碼,讓我知道是工作或沒有 – Priya 2013-03-22 14:23:26

+0

感謝您的答覆,但我有<使用權限android:name =「android.permission.WAKE_LOCK」/>和在接收器中我不能改變 2013-03-22 14:39:04