[英]Sl4A Selecting running application from notification window
我有一个编写的SL4A程序。 在准备发布之前,我有一个问题。
由于某种原因,当应用程序运行时,如果我不在该应用程序的主屏幕上,则会看到它在通知区域中运行,但是当我选择它时,什么也没有发生。 但是,如果我从应用程序区域单击我的图标,它将使该应用程序重新启动。
有什么建议么?
SL4A创建的通知没有任何作用; 他们没有回调,只能提醒用户。 不幸的是,实际上并没有解决的办法:BeanShell,JRuby和Rhino可以进行Java API调用(例如,添加“单击时打开我的应用程序”部分),但不能使用Context
(通知要求),您可以制作自己的API门面版本,但随后需要用户安装适用于Android的特定版本的x(例如Python)。
否则,我能想到的就是弄乱Intent
或其他东西,并在应用程序的/src
中包含一个活动以显示通知,尽管这可能需要学习Java / Android编程,这意味着您还可以继续学习并本机编写整个应用程序。
抱歉,确实没有一个简单的方法
您说过您想发布它,所以我假设您暗示从长远来看您会将其编译成独立的apk?
如果是这样,您将/将使用哪个软件包? py4a的方法,python27,是否是kivy? 根据我的经验,当您使用python27编译为apk时,顶部没有通知窗口,但是如果您要使用py4a的方法进行编译,则应该为您创建一个可行的通知项目。 有关更多信息,请参见以下链接: http : //code.google.com/p/android-scripting/wiki/SharingScripts
否则,ProfSmiles的答案是正确的,但与使用py4a方法相比,它似乎是一个更为复杂的解决方案。
如果您想要一个更嵌入式的方法,也可以看到python27项目,尽管如前所述,它默认没有像py4a这样的通知设置。
Kivy的实现看起来也很有前途,但我不熟悉它,它也许也值得进一步研究: https : //github.com/kivy/python-for-android
好吧,看来您可以使用以下命令查看由SL4A“ como.googlecode.android_scripting”软件包启动的通知:
这更像是骇客。
dumpsys statusbar | grep "pkg=com.googlecode.android_scripting"
SL4A发起的每个通知都将带有一个“ id”。 例如,“ id = 1”是SL4A在服务器运行时启动的通知。 您单击以停止服务器的服务器。
考虑到这一点,您实际上可以列出由软件包启动的每个通知,并阻止直到通知的ID消失。
如果是这样,那么您的下一个通知的ID应该为2或更大。 请注意,如果SL4A停止或崩溃,这可以更改。 下次您可能会收到(RPC)服务器通知的“ id = 2”,然后是您的应用程序通知的“ id = 3”及以上,直到您重新启动设备为止,因此RPC服务器通知会回到“ id = 1” ”。 知道这一点意味着您需要在循环中保留searchig以查找新的通知。
例如在bash中并使用adb:
while read Info; do echo "$Info" | grep 'pkg=com.googlecode.android_scripting'; done < <(adb shell dumpsys statusbar)
您将获得如下内容:
1:StatusBarNotification(pkg = com.googlecode.android_scripting id = 2 tag = null score = 0 notn = Notification(pri = 0 contentView = com.googlecode.android_scripting / 0x109008f vibrate = null sound = null defaults = 0x0 flags = 0x62 kind = [null])user = UserHandle {0})#SL4A RPC通知
7:StatusBarNotification(pkg = com.googlecode.android_scripting id = 3 tag = null score = 0 notn = Notification(pri = 0 contentView = com.googlecode.android_scripting / 0x109008f vibrate = null sound = null defaults = 0x0 flags = 0x10 kind = [null])user = UserHandle {0})#我的通知
让我们一起玩吧!
正在运行:
while read Info; do echo "$Info" | grep "pkg=com.googlecode.android_scripting" | awk '{print $3}' | cut -s -d '=' -f2 ; done < <(adb shell dumpsys statusbar)
例如会得到你:
# Without Using Cut
id=2 # SL4A Notificaion
id=3 # My Notification
要么:
# Using Cut
2 # SL4A Notification
3 # My Notification
让我们开始行动吧! (一个丑陋的解决方案)
# Start ADB USB Serial Connection
adb devices
# Activate Wireless ADB (Needs Root) - Not Needed
# adb shell setprop service.adb.tcp.port 5555
# stop adbd
# start adbd
要么:
# Start ADB Wireless
adb connect 192.168.1.3
NotifyCount=0
NotifyList=()
while read Notify; do
DumpNotify=`echo "$Notify" | grep "pkg=com.googlecode.android_scripting" | awk '{print $3}' | cut -s -d '=' -f2`
if [ ! -z "$DumpNotify" ] ; then
NotifyList[$NotifyCount]="$DumpNotify"
((NotifyCount++))
fi
done < <(adb shell dumpsys statusbar)
SL4ARPCNotification="2"
MyScriptNotification="3"
if [[ ${NotifyList[*]} != *"$MyScriptNotification"* ]] ; then
adb shell am start -a android.intent.action.MUSIC_PLAYER
fi
在带有MyNotification和SL4ARPCNotification变量参数的2个函数中,这应该更好。 这样,您可以在代码中的任何位置进行验证并划分工作:FunctionX用于列出通知,而FunctionY用于比较结果。
这可以在Pyhon或其他口译员中轻松完成。 您需要记住,SL4A本身总是会发出通知。 通过使用Python线程,你可以为新的或旧的通知不断地搜索,而不需要阻止你的程序等待一个变化,因此你可以继续正常runninig脚本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.