我有一个简单的appwidget,我想在活动中发生动作时(在同一个应用程序中)更新它.在onUpdate()中,我立即更新小部件,工作正常.在我的活动中,我在appUidget中调用相同的静态更新方法,该方法在onUpdate()中调用以更新视图.小部件未更新.
我可以将代码直接跟踪到AppWidgetManager.updateAppWidget()方法中,这一切都很好,但是小部件不会更新.
我能看到的唯一可能的区别是,当从活动的上下文调用appwidget的onUpdate()方法的上下文时,传递给我的静态更新方法的上下文对象是不同的.但是,网上有很多这样的例子,所以我希望它能够起作用.
我想知道是否有一种干净的方式导入vcard作为Android联系人.我有一个vcard解析器,但映射每个可能的vcard字段和字段类型将是一个痛苦的,容易出错的练习.有没有更好的办法?
一个Android联系人看起来像一个vcard,所以我怀疑他们内部使用vcards.但是,没有公共API.
我需要发现远程服务器上的开放端口.我想知道这是否可行.我在想我打开一个套接字,如果这个成功,就意味着它被使用了......否则,如果我得到一个异常,那么就不会使用它.
例如,
public boolean isActive() {
Socket s = null;
try {
s = new Socket();
s.setReuseAddress(true);
SocketAddress sa = new InetSocketAddress(this.host, this.port);
s.connect(sa, 3000);
return true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (s != null) {
try {
s.close();
} catch (IOException e) {
}
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
这是一种可行的方法吗?
我们正在使用一个包含使用JAXB注释注释的bean的库.我们使用这些类的方式取决于JAXB.换句话说,我们不需要JAXB,也不依赖于注释.
但是,由于注释存在,它们最终会被处理注释的其他类引用.这需要我在我们的应用程序中捆绑JAXB,这是不允许的,因为JAXB在javax.*包中(android不允许"核心库"包含在你的应用程序中).
所以,考虑到这一点,我正在寻找一种从编译的字节代码中删除注释的方法.我知道有用于操作字节代码的实用程序,但这对我来说是一个新的东西.任何帮助开始朝这个目的将不胜感激.
我正在谈论一个文件上传服务,它接受发布数据,而不是表单数据.默认情况下,java HttpURLConnection将Content-Type标头设置为application/x-www-form-urlencoded.如果我发布纯数据,这显然是错误的.
我(客户端)不知道内容类型.我根本不想设置Content-Type标头.该服务具有一个功能,它将猜测内容类型(基于文件名,从文件中读取一些数据等).
如何取消设置标题?没有删除标头,并将其设置为null不更改值并将其设置为空字符串会导致标头设置为没有值.
我正在尝试暂时强制设备使用移动数据。我在用ConnectivityManager.requestNetwork(),
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
connectivityManager.requestNetwork(request.build(), newRequestTransportCallback(connectivityManager),
(int) TimeUnit.SECONDS.toMillis(10));
Run Code Online (Sandbox Code Playgroud)
哪里newRequestTransportCallback()的回报,
new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
Log.d(TAG,"Network available: " + network + ", binding...");
if (cm.bindProcessToNetwork(network)) {
Log.d(TAG,"Bind successful to network: " + network);
} else {
Log.w(TAG,"Bind failed to network: " + network);
}
}
@Override
public void onUnavailable() {
Log.w(TAG,"Network not available");
}
};
Run Code Online (Sandbox Code Playgroud)
我可以从我的日志语句中看到请求和绑定成功。但是,当我随后调用ConnectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)它时,它告诉我网络已断开连接(并且我尝试轮询以查看更新网络信息是否有延迟,但也没有成功)。
我正在尝试为appwidget定义一个主题,并将其应用于应用程序级别.我有一个主题,如,
<style name="theme.dark">
<item name="android"background">#000000</item>
</style>
Run Code Online (Sandbox Code Playgroud)
在我的清单中,我设置android:theme="@style/theme.dark"了应用程序.但是,当我运行appwidget时,它不会从样式中获取项目.我尝试style="@style/theme.dark"在我的视图布局中设置一个单独的元素,这确实有用......但这不是我想要的.我不想为我视图中的每个元素调出特定的style ="...".这一页,
http://www.androidengineer.com/2010/06/using-themes-in-android-applications.html
有一个很好的示例应用程序使用主题/样式,它的工作完美.唯一的区别是它是一个应用程序..它是在活动而不是应用程序上设置主题.
我还尝试在访问视图之前使用appwidget的onHandleUpdate()中的setTheme(...)以编程方式在Context对象上设置主题.这也不起作用.
有任何想法吗?谢谢.
我需要在安装应用程序时执行操作.我已经开始使用了
Intent.PACKAGE_ADDED
Run Code Online (Sandbox Code Playgroud)
但我没有收到正在安装的应用程序的意图.我想在第一次安装我的应用程序时运行代码.
用例是在线服务注册.我可以列出BOOT_COMPLETED,如果已经安装了应用程序就可以了,但我需要在用户首次安装应用程序时处理这种情况.
这篇文章, 您可以在Android上安装应用程序时运行意图或脚本吗?
建议收听TIMER_TICK并在第一次广播时执行注册并设置一个标志,以便在下一个TIMER_TICK时不执行它.这似乎有问题,因为无论你是否在接收器中做某事,你仍然每隔一分钟启动你的接收器并在此过程中耗尽电池.
有更好的解决方案吗?
我添加coreLibraryDesugaringEnabled到我们的应用程序中,它对于正常的应用程序运行来说工作得很好。
compileOptions {
coreLibraryDesugaringEnabled true
}
Run Code Online (Sandbox Code Playgroud)
和
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.9'
Run Code Online (Sandbox Code Playgroud)
但是,当我运行连接测试时,它会崩溃,并且类上没有此类方法错误Stream:
16:03:56.426 11998 12041 E AndroidRuntime: FATAL EXCEPTION: com....
16:03:56.426 11998 12041 E AndroidRuntime: Process: ...
16:03:56.426 11998 12041 E AndroidRuntime: java.lang.NoSuchMethodError: No static method e([Ljava/lang/Object;)Lj$/util/stream/Stream; in class Lj$/util/n; or its super classes (declaration of 'j$.util.n' appears in /data/app/com....-qU6nwXthxze4O_9rcf1hGg==/base.apk!classes2.dex)
16:03:56.426 11998 12041 E AndroidRuntime: at j$.util.stream.Stream$-CC.of(:1000)
16:03:56.426 11998 12041 E AndroidRuntime: at ...
Run Code Online (Sandbox Code Playgroud)
我发现一些模糊的参考,这可能是因为在调用Multidex.install?之前引用了该类。我首先将该类引用为静态初始化程序,因此可以很早就访问它。不确定这是否是转移注意力,但我想我会提一下。
如果有帮助,则使用AndroidJUnit4ClassRunner.
编辑:我发现了一个模糊的参考,只有一篇文章指出仪器测试不支持这一点:
请注意,在 Android Studio 4.0 中,不支持在仪器测试中使用这些库脱糖类型。
https://medium.com/androiddevelopers/support-for-newer-java-language-apis-bca79fc8ef65
但即使是谷歌关于该功能的嵌入式视频也没有提及这一点。也不确定 …
我有一个小部件,需要在onUpdate()中执行可能长时间运行的操作.只是直接执行操作导致ANR.为了解决这个问题,我的第一次尝试是在其中创建一个线程.我注意到在某些情况下小部件不会更新.我的猜测是,一旦onUpdate()退出,android可能会杀死进程以及未完成的线程.
我的下一次尝试是创建一个意向服务.小部件的onUpdate()只是启动intent服务,它直接完成工作并在完成后更新小部件.这很有用,但令我惊讶的是,onHandleIntent()似乎是单线程的.如果我有两个小部件,然后更新并启动意向服务,它们会按顺序更新...
两个小部件的情况并不重要,但我只是想知道这种模式的最佳实践.
为了解决这两个小部件的情况,每当点击其中任何一个时,我都会用相同的数据更新所有小部件实例.例如,我执行一次长时间运行的过程并将结果应用于所有小部件实例.在我的场景中这没关系,但对于许多小部件来说,重要的是不要这样做.
想法?
android ×8
java ×3
android-connectivitymanager ×1
annotations ×1
bcel ×1
content-type ×1
javassist ×1
post ×1
sockets ×1
vcf-vcard ×1