sách gpt4 ăn đã đi

android - 与 WallpaperService 通信

In lại 作者:搜寻专家 更新时间:2023-11-01 08:01:21 25 4
mua khóa gpt4 giày nike

有什么方法可以从 Hoạt động 直接与 WallpaperService 通信吗? 看起来我无法使用普通服务通信类,因为 onBind 方法在我扩展的 WallpaperService 类中被声明为 cuối cùng。值得注意的是,我指的是của tôi WallpaperService,而不是任何

如果这不可能,有什么变通办法吗?

câu trả lời hay nhất

我的解决方案是使用本地套接字。我在壁纸的 Engine 的构造函数中创建了一个 LocalServerSocket 的实例。这是一个快速实现。服务器在单独的线程上运行,并直接绑定(bind)到 MyEngine 的生命周期。当 continueSocket 设置为 SAI 时,线程将停止。这发生在 onDestroy 上。 Problem is that LocalServerSocket.accept() blocks until there's something to do.解决方法是向我们自己的服务器发送一条消息,以便它再次运行循环并检查 continueSocket(现在为 SAI),关闭服务器。检查 closeSocketServer 方法。我在示例中的 onDestroy 中运行它,但您可能想在其他地方使用它,例如 onSurfaceDestroyed 并添加您自己的完整性检查。

public class MyWallpaperService extends WallpaperService {
@Ghi đè
public Engine onCreateEngine() {
return new MyEngine();
}

private class MyEngine extends Engine {

private boolean continueSocket = true;

MyEngine() {
new Thread() {
@Ghi đè
công khai void run() {
thử {
LocalServerSocket server = new LocalServerSocket("MyAddress");
Log.d("SERVER READY", "Server is ready.");
while(continueSocket) {
LocalSocket receiver = server.accept();
if(receiver != null) {
InputStream input = receiver.getInputStream();
byte[] data = IOUtils.toByteArray(input);
Log.d("GOT DATA", new String(data));
}
}
server.close();
} bắt (IOException ví dụ) {
Log.wtf("IOEXCEPTION", ex);
}
}
}.bắt đầu();
}

@Ghi đè
public void onDestroy() {
closeSocketServer();
super.onDestroy();
}

private void closeSocketServer() {
continueSocket = false;
thử {
LocalSocket socket = new LocalSocket();
socket.connect(new LocalSocketAddress("MyAddress"));
socket.getOutputStream().write(new byte[0]);
socket.getOutputStream().close();
socket. đóng();
} bắt (IOException ví dụ) {
//
}
}
}
}

在我的 Hoạt động 中,它可以像这样简单...

thử {
LocalSocket sender = new LocalSocket();
sender.connect(new LocalSocketAddress("MyAddress"));
String data = "Hello world!";
Log.d("SENT DATA", data);
sender.getOutputStream().write(data.getBytes());
sender.getOutputStream().close();
sender.close();
} bắt (IOException ví dụ) {
Log.wtf("IOEXCEPTION", ex);
}

Logcat 最终看起来像这样:

D/SERVER READY﹕ Server is ready. (when the wallpaper starts up)
D/SENT DATA﹕ Hello world! (when the activity sends data)
D/GOT DATA﹕ Hello world! (when the wallpaper gets the data)

关于android - 与 WallpaperService 通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20915926/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress