我的Q很简单。
我无法从我的服务中找到修改当前活动窗口属性的方法。 我在堆栈上看到了一些线程,也在其他地方,但它们都没有真正回答。 前台(活动)活动可以是任何东西。我无法访问它。
这家伙似乎问同样的问题,没有A ...... How to get the foreground activity instance?
提前许多人!
答案 0 :(得分:0)
不幸的是Android似乎不支持这样的需求,修改顶级应用程序的窗口,从后台运行的服务。
我发现这是最合适的做法:
http://developer.android.com/guide/components/services.html
” 向用户发送通知 运行后,服务可以使用Toast Notifications或状态栏通知向用户通知事件。
Toast通知是当前窗口表面上显示的消息,然后消失,而状态栏通知在状态栏中提供一条消息,用户可以选择该消息以获取行动(例如开始活动)。
通常,状态栏通知是完成某些后台工作(例如文件已完成下载)并且用户现在可以对其进行操作时的最佳技术。当用户从展开视图中选择通知时,通知可以启动活动(例如查看下载的文件)。
有关详细信息,请参阅Toast Notifications或状态栏通知开发人员指南。“
答案 1 :(得分:0)
可访问性服务提供了一种与foregroung服务进行交互的方式。这有点像解决方法,但仍然有效。
要使用此功能,请扩展辅助功能服务并创建一个新类。侦听AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED事件。只要更改前台活动,就会触发此事件。当前的前台进程名称可从事件对象获得。
AccessibilityService.java
public class AccessibilityService extends android.accessibilityservice.AccessibilityService{
public static AccessibilityService instance;
@Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
// Note : This event is sometimes called more than one for a foreground service
if (accessibilityEvent.getEventType() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED){
Log.d("Event","TYPE_WINDOW_STATE_CHANGED");
Log.d("Pkg",accessibilityEvent.getPackageName().toString());
// Check PackageName matching here and continue with code
// Here we prevent whatsapp from opening
// Each time it launches we simulate the press of back button
if (accessibilityEvent.getPackageName().equals("com.whatsapp")){
doAction();
}
}
}
@Override
public void onInterrupt() {
}
@Override
protected void onServiceConnected() {
super.onServiceConnected();
Log.d("Accessibility","Service Connected");
}
public void doAction(){
performGlobalAction(GLOBAL_ACTION_BACK);
}
}
在这里,我检查前台服务是否是Whatsapp,然后继续检查我的代码。
除此类外,还必须在应用程序部分的清单文件中声明此服务,并在res / xml文件夹中声明配置文件。
<service android:name=".AccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/serviceconfig"/>
</service>
serviceconfig.xml
<?xml version="1.0" encoding="utf-8"?>
<accessibility-service
xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityEventTypes="typeAllMask"
android:accessibilityFeedbackType="feedbackAllMask"
android:accessibilityFlags="flagDefault"
android:notificationTimeout="100"
android:canRetrieveWindowContent="true"
/>
另外,请确保用户允许访问服务权限。
https://github.com/abinpaul1/Android-Snippets/tree/master/GetForegroundService