2

NotificationListenerService를 사용하여 Android 전화에서 알림에 액세스하고 싶습니다. 많은 자습서를 확인했지만 서비스 호출 위치를 찾을 수 없습니다.Android에서 NotificationListenerService를 시작하는 방법

MainActivity에서 bindService 또는 startService를 사용해야합니까? 의도는 어떻게 생겼을까요? 누군가이 구문을 보여줄 수 있습니까?

체크 아웃 내가 공부하고있는 서비스 구현 중 하나

public class NLService extends NotificationListenerService { 

Context context; 

@Override 
public void onCreate() { 

    super.onCreate(); 
    context = getApplicationContext(); 


} 


@Override 
public void onNotificationPosted(StatusBarNotification sbn) { 
    String pack = sbn.getPackageName(); 
    String ticker =""; 
    if(sbn.getNotification().tickerText !=null) { 
     ticker = sbn.getNotification().tickerText.toString(); 
    } 
    Bundle extras = sbn.getNotification().extras; 
    String title = extras.getString("android.title"); 
    String text = extras.getCharSequence("android.text").toString(); 
    int id1 = extras.getInt(Notification.EXTRA_SMALL_ICON); 
    Bitmap id = sbn.getNotification().largeIcon; 


    Log.i("Package",pack); 
    Log.i("Ticker",ticker); 
    Log.i("Title",title); 
    Log.i("Text",text); 

    Intent msgrcv = new Intent("Msg"); 
    msgrcv.putExtra("package", pack); 
    msgrcv.putExtra("ticker", ticker); 
    msgrcv.putExtra("title", title); 
    msgrcv.putExtra("text", text); 
    if(id != null) { 
     ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
     //id.compress(Bitmap.CompressFormat.PNG, 100, stream); 
     byte[] byteArray = stream.toByteArray(); 
     msgrcv.putExtra("icon",byteArray); 
    } 
    LocalBroadcastManager.getInstance(context).sendBroadcast(msgrcv); 

} 
@Override 

public void onNotificationRemoved(StatusBarNotification sbn) { 
    Log.i("Msg","Notification Removed"); 

} 

}

+0

그러면 Android 시스템에서 알림을 받아야합니까? – dipali

답변

3

수신 알림을 듣는 경우, 명시 적으로 시작할 필요는 없습니다. 먼저 다음과 같은 권한이 매니페스트에 서비스를 정의 - android.permission.BIND_NOTIFICATION_LISTENER_SERVICE

<service android:name=".MyNotificationListener" 
     android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> 
    <intent-filter> 
     <action android:name="android.service.notification.NotificationListenerService" /> 
    </intent-filter> 
</service> 

알아서하는 또 다른 것은 당신이 중 하나를 다음과 같은 의도를 사용하여 권한을 부여해야한다는 것입니다 -

Intent intent=new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"); 

또는 알림 액세스를 수동으로 부여해야합니다.

+0

받는 사람 대상이 의도를 전달해야하는 방법은 무엇입니까? – user3348949

+0

실례를 보여 주실 수 있습니까? – user3348949

+0

위의 의도는 알림 설정을 여는 데 사용됩니다. 알림 액세스를 요청하는 모든 앱을 나열합니다. 알림 수신기 서비스를 사용하기 전에 앱에 알림 액세스 권한을 부여해야합니다. – Gautam