-1

API 26で常に実行されているブロードキャストレシーバの実装に問題があります。 まず、私のインテントフィルタは、Oreoの制限なしインテントフィルタのホワイトリストにありません。 私は放送受信機をNotificationListenerServiceでラップしようとしましたが、しばらくすると殺されます。 さらに、私はフォアグラウンドサービスの通知を表示したくありません。 TargetSDKをAPI 25にダウングレードすると、これらの制限はOreoデバイスでは有効になりません。 ありがとうございました:)常にAPI 26でブロードキャストレシーバを実行中

+0

「私はAPI 25に私のTargetSDKをダウングレードした場合、これらの制限はOreoデバイスでは有効になりませんか? - あなたのアプリにこれらの背景の制限を適用できるユーザー自動ではなく単なるマニュアルです。 – CommonsWare

答えて

0

BroadcastReceiver入ってくる放送を処理するためにlimited timeを持っています

システムがブロックされる受信機と殺されるために候補者を考慮し 前にできること10秒のタイムアウトがあります

「常に実行中」とは、アプリが実行されていなくても常に登録されているブロードキャストのように、実際に「暗黙的に登録」された場合、targetSDKを24以下に設定しない、およびOreoユーザーが設定に入り、あなたのアプリに新しい制限を適用しない限り、それは問題ありません。 docsから

アプリは、デフォルトでは...ほとんどの暗黙の 放送

に登録する

を自分のマニフェストを使用することはできません、これらの制限は 対象Oのアプリケーションにのみ適用されますただし、ユーザーが設定画面から任意のアプリ にこれらの制限を有効にすることができます。アプリが対象外の場合でも、

+0

それで、私のアプリターゲットをSDK25にダウングレードし、ブロードキャストレシーバーをアプリケーションマニフェストに登録して、常に登録するように勧めますか?本当にありがとう! – user3424279

+0

これは未来の証明の解決策ではありません。なぜなら、ある種の依存関係のためにターゲットを再度増やす必要があるかもしれないからです。しかし、現時点で私がやることです。 – marmor

+0

これは悪いことです。 。 API 26にとどまり、レシーバーを常に登録させる他の方法はありませんか? – user3424279

0

それは助けることができる場合は(自分の放送受信機は、あなたのアプリケーションや他のアプリのマニフェストに登録されている場合)、このソリューションは、私のために仕事をした:

PackageManager pm=getPackageManager(); 
List<ResolveInfo> matches=pm.queryBroadcastReceivers(yourIntent, 0); 

for (ResolveInfo resolveInfo : matches) { 
    Intent explicit=new Intent(yourIntent); 
    ComponentName cn= new ComponentName(resolveInfo.activityInfo.applicationInfo.packageName, 
        resolveInfo.activityInfo.name); 

    explicit.setComponent(cn); 
    sendBroadcast(explicit); 
} 
関連する問題