我正在开发一个将在androidTv中运行的Android应用程序(目前我正在使用MiBox进行测试) 要求就像我需要捕获Android操作系统收到的号码活动通知并将其显示在APP的某个地方。
package org.libsdl.app;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Notification;
import android.app.Notification.Action;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.service.notification.NotificationListenerService;
import android.service.notification.StatusBarNotification;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
import org.haxe.lime.HaxeObject;
public class AndroidNotificationListener extends NotificationListenerService {
private static final int EVENT_UPDATE_CURRENT_NOS = 0;
public static List<StatusBarNotification[]> mCurrentNotifications = new
ArrayList<StatusBarNotification[]>();
public static int mActiveNotificationsCount = 0;
public static StatusBarNotification mPostedNotification;
public static StatusBarNotification mRemovedNotification;
@Override
public void onCreate() {
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return super.onBind(intent);
}
@Override
public boolean onUnbind(Intent mIntent) {
return super.onUnbind(mIntent);
}
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
updateCurrentNotifications();
mPostedNotification = sbn;
// Get the text from notification
// CharSequence notificationText = sbn.getNotification().extras.getCharSequence(Notification.EXTRA_TEXT);
// Show a toast with your Notification Text
// Toast.makeText(getApplicationContext(), notificationText, Toast.LENGTH_SHORT).show();
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
updateCurrentNotifications();
mRemovedNotification = sbn;
}
public void onListenerConnected() {
// Add some prints here to check if our service is connected to OS or not?
}
private void updateCurrentNotifications() {
try {
StatusBarNotification[] activeNos = getActiveNotifications();
if (mCurrentNotifications.size() == 0) {
mCurrentNotifications.add(null);
}
mCurrentNotifications.set(0, activeNos);
mActiveNotificationsCount = activeNos.length;
} catch (Exception e) {
System.out.println("Anil : AndroidNotificationListener : Should not be here!!");
e.printStackTrace();
}
}
public static StatusBarNotification[] getCurrentNotifications() {
if (mCurrentNotifications.size() == 0) {
return null;
}
return mCurrentNotifications.get(0);
}
}
AndroidManifest.xml部分是:
<service
android:name="org.libsdl.app.AndroidNotificationListener"
android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
android:enabled="true" >
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService" />
</intent-filter>
</service>
同样的服务适用于我的手机,但在我的androidTv(MiBox)中,它无法正常工作
和在手机中我们有设置,我们可以启用/禁用我们的应用程序来接收通知,MiBox中没有相同的选项。
我的MiBox有Android M,我的手机有Android N.我错过了在Android服务中运行此服务之前我应该知道的东西吗?
所以我的问题是为什么这个服务在androidTv中不起作用?
任何有关这方面的帮助将非常感激..
答案 0 :(得分:0)
我已经找到了我的虚拟应用程序可以在手机上运行而不能在miBox上运行的原因。 在我的手机上,当我安装虚拟应用程序时,它要求获得许可以接收通知,而当我给予许可时,它就开始获得许可。 在miBox上,我们无权授予应用程序接收通知的权限。 简而言之,该应用程序无法在miBox上接收通知,因为该应用程序没有权限,因为它附加了侦听器/应用程序以接收通知。
,我们无法在Android TV中将用于通知的侦听器附加到我们的应用程序。但是,只有在将该应用程序签名为系统应用程序时,我们才能这样做。