2012-07-10 42 views
0

我試圖發送計劃通知創建AIR本機擴展,我有以下代碼:與AIR本機擴展的Android AlarmManager不行

package com.ane.notification.functions; 

public class ScheduledNotificationFunction implements FREFunction { 

    Context androidActivity; 
    Context androidContext; 

    @Override 
    public FREObject call(FREContext context, FREObject[] args) { 
     androidActivity = context.getActivity(); 
     androidContext = androidActivity.getApplicationContext(); 
     AlarmManager alarmManager = (AlarmManager) androidContext.getSystemService(Context.ALARM_SERVICE); 
     int id = (int) System.currentTimeMillis(); 
     Intent intent = new Intent(androidContext, SendNotification.class); 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(androidContext, id, intent, 0); 
     alarmManager.set(AlarmManager.RTC_WAKEUP, (System.currentTimeMillis()+30000), pendingIntent); 
     return null; 
    } 
} 

類sendNotification的

package com.ane.notification.functions; 

public class SendNotification extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // Send Notification Code 
    } 
} 

AndroidManifest。 xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.ane.notification" 
    android:versionCode="1" 
    android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15" /> 
    <application android:label="@string/app_name" 
     android:icon="@drawable/ic_launcher" 
     android:theme="@style/AppTheme"> 
     <receiver android:name=".functions.SendNotification"/> 
    </application> 
</manifest> 

問題是沒有調用SendNotification一次m約定確定時間發送通知。我認爲ScheduledNotificationFunction代碼沒問題,因爲我已經放入try/catch並且不會生成異常,所以我假設警報是在系統中註冊的。

我不是很熟悉android中的編程,所以任何錯誤的錯誤或讓我知道,謝謝。

回答

2

我建議你用行動來過濾這些類型的請求,因此,你應該有一些看起來更像是這樣的:

long fireTime = SystemClock.elapsedRealtime() + 1000; 

Intent intent = new Intent("com.ane.notification.functions.SOME_ACTION"); 
PendingIntent delayPendingIntent = PendingIntent.getBroadcast(appContext, 0, intent, 0); 
AlarmManager am = (AlarmManager)appContext.getSystemService(Context.ALARM_SERVICE); 
am.set(AlarmManager.ELAPSED_REALTIME, fireTime, delayPendingIntent); 

然後你需要添加清單除了你的AIR應用程序描述不是Android清單。你也需要在清單中使用完整的類包:

<android> 
    <manifestAdditions><![CDATA[ 
     <manifest android:installLocation="auto" > 
      <uses-permission android:name="android.permission.INTERNET"/> 
      <application> 
       <receiver android:name="com.ane.notification.functions.SendNotification"> 
        <intent-filter> 
         <action android:name="com.ane.notification.functions.SOME_ACTION"/> 
        </intent-filter> 
       </receiver> 
      </application> 
     </manifest> 

    ]]></manifestAdditions> 
</android> 

您必須在清單中註冊的接收器中的系統調用它時,應用程序沒有運行。如果您只是在應用程序正在運行時想要接收器而不處理清單添加,那麼您可以在代碼中執行此操作。

注意:如果您的應用程序在報警觸發前停止,即使您可以在SendNotification接收器中運行代碼,也不會初始化FREContext。