0

昨日、変なものを見つけました。アプリをローカリゼーション バージョン (異なるアプリ差分パッケージ、同じコード) でテストしているときに、興味深いバグが 1 つ見つかりました - アプリは AlarmManager と保留中のインテントでアラームを設定します - ブロードキャストが起動されると、1 つのアプリのみがアクティブになり、保留中を実行しますインテントと他のすべてのアプリ(異なる言語のみ)がまったく反応しません。これはアンドロイドのバグですか?? 設定されたアラームは、独自の設定されたアラームを持つすべてのアプリをトリガーすることを期待していますが、Android が起動しているか、最後にアクティブなアプリがブロードキャストまたは受信ブロードキャストによってトリガーされますか? 保留中のインテントは、システムからのブロードキャストにどのように関連付けられていますか? ブロードキャストを期待しているアプリと、この .apk のアプリをシステムがどのように認識するのでしょうか? 奇妙でわかりにくいように思えるかもしれませんが、私も混乱しています..

public class AlarmSetter  {

    public void SetAlarma(Context context){

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.set(Calendar.SECOND, 57);
    calendar.set(Calendar.MINUTE, 59);
    calendar.set(Calendar.HOUR_OF_DAY, 23); 
    calendar.add(Calendar.DAY_OF_MONTH, 0);

     Intent intent = new Intent(context, AlarmKicked.class);
     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 1333333, intent, PendingIntent.FLAG_UPDATE_CURRENT);
     AlarmManager am =(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
     am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),AlarmManager.INTERVAL_DAY,
             pendingIntent);       
    }

}
4

1 に答える 1

0

OK、バグについての確認を待っています

よし、ついに!!!!

これは LVL バグです: したがって、アプリは bg.google.myapppackage.apk です.. 何も問題ありません.. LVL ライセンスを使用します - ServerManagedPolicy - カスタマイズ - bcs google は、開発者が例を使用していると述べています..

ServerManagedPolicy.java には、" private static final String DEFAULT_MAX_RETRIES = "0";" があります。「private static final String DEFAULT_MAX_RETRIES = "10";」を実行しました。つまり、ロックダウンの前に 10 回起動する必要があるということです..新しいことは何もありません。ユーザーは 10 回のチェックがなくなる前にアプリを起動できます..いいですね。

しかし!問題は LVL にあり、すべての開始はシステムによって非常に奇妙な方法で登録されます..どのように? 簡単に: このように、開始するたびにパッケージに番号が追加されます

03-17 00:25:45.318: I/PackageManager(59): /data/app/bg.google.myapppackage-1.apk が変更されました。開梱

03-17 00:25:45.318: I/PackageManager(59): /data/app/bg.google.myapppackage-2.apk が変更されました。開梱

03-17 00:25:45.318: I/PackageManager(59): /data/app/bg.google.myapppackage-3.apk が変更されました。開梱

それらはアプリが開始された時間です... OK、まだ何も問題はありません... いいえ!これは間違っています! パッケージ bg.google.myapppackage-1.apk からアクティビティを開始し、このパッケージが AlarmManager でアラームを設定し、アプリを閉じると、後でアラームが発生しますが、レシーバーは存在しなくなります.. ユーザーがアプリを閉じてもう一度起動すると、bg.google.myapppackage-2.apk があり、2 番目のパッケージがアラーム 2 を設定しますが、閉じているときにパッケージはもう存在しません... システムはブロードキャストを起動しますが、そこにはレシーバーではなく、アプリはまったく反応していません。これは私の場合の問題でした..アプリをテストしてブロードキャストを取得しなかったか、アクティブなアプリのみがブロードキャストを登録し、他のアプリは登録しませんでした..

そのため、AlarmManager によってトリガーされる更新を実行しているアプリがある場合は、「private static final String DEFAULT_MAX_RETRIES = "0";」を設定する必要があります。そうしないと、再試行期間中にアプリが誤動作したり、機能が失われたりする可能性があります // Google はパッケージの名前を変更してそれを修正する必要があり、誰かがバグ チケットを投稿する必要があると思います..日中は IT を勉強し、夜は家で仕事をしています.. だから睡眠は私が恋しく思うものであり、このような時間を失うことは望ましくありません..)

03-14 18:22:51.860: D/PackageManager(199): /data/app/bg.google.myapppackage-1.apk にインストールされた新しいパッケージ

03-17 00:25:45.348: D/installd(35): DexInv: --- BEGIN '/data/app/bg.google.myapppackage-1.apk' ---

03-17 00:25:47.599: D/installd(35): DexInv: --- END '/data/app/bg.google.myapppackage-1.apk' (成功) ---

03-17 00:25:47.748: 私/installd(35): 移動 /data/dalvik-cache/data@app@bg.google.myapppackage-1.apk@classes.dex -> /data/dalvik-cache/ data@app@bg.google.myapppackage-1.apk@classes.dex

于 2013-03-14T07:42:53.943 に答える