gpt4 book ai didi

android - 从 java 服务访问 Android 上下文

转载 作者:行者123 更新时间:2023-12-05 00:07:37 25 4
gpt4 key购买 nike

我正在尝试创建一个在系统服务器之外运行的 java 服务,该服务将从启动时启动,该服务基于配置可以监控 Android 设备并收听广播。我无法找到有关如何编写长期运行的 java 服务的文档,该服务作为不是由 zygote 启动的进程运行。我正在尝试修改平台,此服务将添加到通过重建 Android 源代码生成的自定义 system.img。

该服务的启动类似于用于从 adb 运行 am 的脚本。

base=/system
export CLASSPATH=$base/framework/am.jar
exec app_process $base/bin com.android.commands.am.Am "$@"

我发现尝试添加守护进程的唯一示例是完全实现 native services在设备上运行。

Embedded Android 描述了 Android 用户空间和一些在那里运行的本地守护进程,以及如何创建服务并将它们添加到 init 以至少在 Zygote 和系统服务器等之前在设备启动时启动。

public class Monitor{
public static void main(String [] args){
new Monitor.run();
}
public void run(){
Application app = new Application();
Context con = app.getApplicationContext();
BroadcastReceiver receiver = new BroadcastReceiver(){
public void onReceive(Context context, Intent intent){
Log.i(TAG, "Received intent:"+ intent.getAction());
}
}
IntentFilter filter = new IntentFilter("android.intent.action.TIME_TICK")
}
}

我还根据 ActivityManagerService 中的一段代码尝试了这一点。 公共(public)类监视器{ 私有(private)上下文 mContext;

    Monitor(){
Looper.prepare()
ActivityThread at = ActivityThread.systemMain();
mContext = at.getSystemContext();
}
public static void main(String [] args){
new Monitor.run();
}
public void run(){
BroadcastReceiver receiver = new BroadcastReceiver(){
public void onReceive(Context context, Intent intent){
Log.i(TAG, "Received intent:"+ intent.getAction());
}
}
IntentFilter filter = new IntentFiler("android.intent.action.AIRPLANE_MODE");
mContext.registerReceiver(receiver,filter);
}
}

我可以使用 adb 和 am 从命令行生成 Intent/广播,但无论如何都可以接收广播。任何意见或建议表示赞赏。

最佳答案

Activity 管理器有代码来防止 non_Apps/Zygote 进程在 Android 中接收广播。最终使用不同的方法来满足我自己的需求。

public Intent registerReceiver(IApplicationThread caller, String 
callerPackage,
IIntentReceiver receiver, IntentFilter filter, String
permission, int userId) {
enforceNotIsolatedCaller("registerReceiver");
...
}

关于android - 从 java 服务访问 Android 上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13808311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com