2017-06-20 17 views
5

フォアグラウンドサービスを開始しようとしています。私はサービスが始まるが通知は常に抑制されることを通知されます。私は、アプリが自分のデバイスのアプリ情報に通知を表示することが許可されていることを再度確認しました。ここに私のコードは次のとおりです。Androidフォアグラウンドサービス通知が表示されない

private void showNotification() { 
    Intent notificationIntent = new Intent(this, MainActivity.class); 
    notificationIntent.setAction(Constants.ACTION.MAIN_ACTION); 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, 
      notificationIntent, 0); 

    Bitmap icon = BitmapFactory.decodeResource(getResources(), 
      R.mipmap.ic_launcher); 

    Notification notification = new NotificationCompat.Builder(getApplicationContext()) 
      .setContentTitle("Revel Is Running") 
      .setTicker("Revel Is Running") 
      .setContentText("Click to stop") 
      .setSmallIcon(R.mipmap.ic_launcher) 
      //.setLargeIcon(Bitmap.createScaledBitmap(icon, 128, 128, false)) 
      .setContentIntent(pendingIntent) 
      .setOngoing(true).build(); 
    startForeground(Constants.FOREGROUND_SERVICE, 
      notification); 
    Log.e(TAG,"notification shown"); 

} 

ここで私は関係で見るだけのエラーです: 06-20 12:26:43.635 895-930/? E/NotificationService: Suppressing notification from the package by user request.

答えて

10

問題は、私はAndroidのOを使用していた、それはより多くの情報が必要です。ここに私の場合はアンドロイドO.

mNotifyManager = (NotificationManager) mActivity.getSystemService(Context.NOTIFICATION_SERVICE); 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) createChannel(mNotifyManager); 
    mBuilder = new NotificationCompat.Builder(mActivity, "YOUR_TEXT_HERE").setSmallIcon(android.R.drawable.stat_sys_download).setColor 
      (ContextCompat.getColor(mActivity, R.color.colorNotification)).setContentTitle(YOUR_TITLE_HERE).setContentText(YOUR_DESCRIPTION_HERE); 
    mNotifyManager.notify(mFile.getId().hashCode(), mBuilder.build()); 

@TargetApi(26) 
private void createChannel(NotificationManager notificationManager) { 
    String name = "FileDownload"; 
    String description = "Notifications for download status"; 
    int importance = NotificationManager.IMPORTANCE_DEFAULT; 

    NotificationChannel mChannel = new NotificationChannel(name, name, importance); 
    mChannel.setDescription(description); 
    mChannel.enableLights(true); 
    mChannel.setLightColor(Color.BLUE); 
    notificationManager.createNotificationChannel(mChannel); 
} 
+0

これを処理するより便利な方法はありますか?サポート/ compat-style? 26より前のプラットフォームと26+のプラットフォームの両方で動作する同じコード。「if」を使用せずにコードを複製する。 –

+0

if(Build.VERSION.SDK_INT> = Build.VERSION_CODES.O){createNotificationChannel(context);} //ここでコードを残してください –

+0

この新しいコードスニペットでは、 'mNotifyManager.notify( ) 'の代わりに' startForeground() 'の代わりに使用します。この場合、実際にサービスをフォアグラウンドにしていますか? –

0

ための成功したコードは、それは私がIntentServiceを使用することによって引き起こされました。

つまり、フォアグラウンドサービスが必要な場合は、サブクラスServiceです。

関連する問題