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

クラス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が呼び出されない場合、通知を送信するための明確な時間を一度マークすることです。try / catchを入れて例外を生成しないので、ScheduledNotificationFunctionコードは問題ないと思います。したがって、アラートはシステムに登録されていると思います。

私は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);

次に、Android マニフェストではなく、そのマニフェストを AIR アプリケーション記述子に追加する必要があります。また、マニフェストで完全なクラス パッケージを使用する必要があります。

<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 に答える