0

我正在尝试创建一个用于发送预定通知的 AIR 本机扩展,我有以下代码:

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;
    }
}

类发送通知

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 一次标志着发送通知的确定时间。我认为 ScheduledNotificationFunction 代码很好,因为我已经放入了 try / catch 并且不会生成异常,所以我假设警报已在系统中注册。

我对android中的编程不是很熟悉,所以这个错误中缺少任何东西或者让我知道,谢谢。

4

1 回答 1

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 也不会被初始化。

于 2012-08-02T06:13:43.913 回答