0

푸시 알림을 표시하려는 앱에서 작업하고 있습니다. 제 3 자 서비스를 사용하지 않는 것은 제 고객의 요구 사항이므로 GCM/Firebase를 사용하는 것은 의문의 여지가 있습니다.앱이 GCM/Firebase없이 닫힐 때 Android 알림 실행

아래 코드를 사용하여 서비스 알림을 성공적으로 표시 할 수 있습니다.

public class SendNotificationService extends Service { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     CharSequence title = "Notification Title"; 
     CharSequence message = "This is a test notification."; 

     Drawable drawable= ContextCompat.getDrawable(this,R.drawable.brand_icon_color); 

     Bitmap bitmap = ((BitmapDrawable)drawable).getBitmap(); 

     NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.brand_icon_small_color) 
       .setLargeIcon(bitmap) 
       .setAutoCancel(true) 
       .setContentTitle(title) 
       .setOngoing(false); 

     mBuilder.setContentText(message); 
     mBuilder.setTicker(message); 
     mBuilder.setWhen(System.currentTimeMillis()); 

     NotificationManager notificationManager = (NotificationManager) this.getSystemService(NOTIFICATION_SERVICE); 

     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, new Intent(), 0); 
     mBuilder.setContentIntent(pendingIntent); 
     notificationManager.notify(0, mBuilder.build()); 

     return START_STICKY; 
    } 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onDestroy() { 
     Toast.makeText(this, "Notifications Stopped...", Toast.LENGTH_LONG).show(); 
    } 
} 

이 서비스는 내 AsyncTask onPostExecute 메서드를 통해 시작합니다.

Intent intentService = new Intent(context, SendNotificationService.class); 
context.startService(intentService); 

나는 튜토리얼의 다음 수를 만들어 내가 안드로이드 설정에서 내 실행중인 애플리케이션으로 갈 경우, 나는이 서비스 실행을 볼 수있을 것이다 것을 발견했다. 그러나 그러한 서비스를 찾을 수 없었습니다.

이제 응용 프로그램을 닫으면 문제가 사라지고 알림도 사라집니다. 나는 사용자가 어떤 행동을 취할 때까지 그것을 머물고 싶다.

이 외에도 앱을 시작하지 않아도 전화 시작으로이 서비스를 시작하겠습니다.

+0

부팅시 서비스를 실행하려면 다음을 확인하십시오. http://stackoverflow.com/questions/2784441/trying-to-start-a-service-on-boot-on-android – zed

+0

"푸시 알림을 표시하고 싶습니다."- 코드에는 아무 것도 관련이 없습니다. "신청서를 닫을 때"- ** 자세히 설명해주십시오. ** 이것이 의미하는 바를 말하십시오. – CommonsWare

+0

코드에서 알림을 표시 할 수 있습니다. 백그라운드에서이 서비스를 실행할 수있는 경우이 알림을 푸시하는 방법은 어렵지 않습니다. 앱 닫기에서 앱을 단순히 최근 Apps에서 슬라이드하거나 X를 눌러 닫으면 알림 바에서 알림이 사라집니다. –

답변

0

1) 매니페스트에 권한을 추가 MyBroadcastReceiver.java에서

<receiver android:name="com.example.MyBroadcastReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BOOT_COMPLETED" /> 
    </intent-filter> 
</receiver> 

:

package com.example; 

public class MyBroadcastReceiver extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     Intent startServiceIntent = new Intent(context, MyService.class); 
     context.startService(startServiceIntent); 
    } 
} 

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

2) 부팅시 실행하는 매니페스트에 수신기 추가