我已经构建了一个功能正常的C2DM应用程序,通常它运行得很好,推送消息快速到达.但是,当我第一次启动应用程序或重新启动应用程序时,我发现相当频繁,但消息不会到达.
它们肯定是成功发送的(我得到200响应)并且消息格式肯定是正确的(稍后发送相同的消息工作正常).失败可以持续很短的几分钟,然后突然它再次开始工作,然后一直工作.
然而,即使它开始工作,旧的消息显然已经消失,永远不会到达.这些消息肯定没有到达 - 我有大量的日志记录,突出显示任何到达的C2DM消息.
我完全清楚C2DM永远不会保证交付,所以我希望有些消息会失败,但根据我的经验,在某些情况下,它只是不起作用.我显然想知道我的应用程序或C2DM服务本身是否存在错误.
什么可能导致C2DM无法传递消息?如果无法传递消息,为什么C2DM服务器不会再次从其队列中尝试?相关 - 我应该仅在应用程序第一次启动时获取新的注册ID,还是每次应用程序启动时刷新它?我目前做的是后者(在应用程序中,而不是活动).
我有两个间歇性变化的地理点,并希望MapView调整大小并进行平移以确保两个点始终可见.我可以轻松地将地图重新定位在两者之间的中间位置,但是如何设置缩放级别以确保我的两个点可见?
View.getLocationOnScreen()返回View的X和Y坐标.
该应用程序需要与其他应用程序共享存储在cacheDir根目录中的PDF文件。该问题出现在 Android 12 上,也可能出现在其他版本上。
显现:
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
Run Code Online (Sandbox Code Playgroud)
提供者路径:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<cache-path name="cache" path="." />
</paths>
Run Code Online (Sandbox Code Playgroud)
意图:
val pdfFile = File(requireContext().cacheDir, pdfFileName)
val fileUri: Uri = FileProvider.getUriForFile(
requireContext().applicationContext,
requireContext().packageName.toString() + ".provider",
pdfFile
)
val intent = Intent()
intent.action = Intent.ACTION_SEND
intent.putExtra(Intent.EXTRA_STREAM, fileUri)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
intent.type = "application/pdf"
startActivity(Intent.createChooser(intent, "Share Document"))
Run Code Online (Sandbox Code Playgroud)
共享表成功打开,但此时始终显示此异常,并且随后共享到另一个应用程序失败。
Writing exception to parcel
java.lang.SecurityException: Permission Denial: reading
androidx.core.content.FileProvider uri
content://uk.co.packagename.provider/cache/8BEDF7212-0DE46-42B0-9FA9-32C434BDD2F3HO.pdf
from pid=15363, uid=1000 requires the provider be exported, or grantUriPermission() …Run Code Online (Sandbox Code Playgroud) 当我编写方法或使用成员变量时,我经常发现我需要在应用程序中共享它们.但他们应该去哪里?
我可以将Activity子类化,但是一旦我使用MapView并且被迫使用MapActivity就会失败,所以我的所有活动都不会从我的子类继承.我有办法解决这个问题吗?
在继承不适用的情况下,我倾向于将泛型方法和成员变量放入Application对象的子类中,但我发现它创建了一堆代码,因为每个类都需要通过via获取对应用程序对象的访问权限上下文,或者我必须把它传下来.
我怀疑我最好创建MyApplication.getInstance()并将所有内容保存在单例中,而不是通过应用程序类传递应用程序对象.但之前我想看看你们要说些什么.
我打开一个旧项目,其中注册了一个正常的Android 2.2外部库.我想使用谷歌地图,我将外部库更改为Android 2.2 Google API.之后,我无法解析清单文件,我收到一个错误:
AnroidManifest.xml
Error: Cannot parse file
Run Code Online (Sandbox Code Playgroud)
错误发生在URI的第二行
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
Run Code Online (Sandbox Code Playgroud)
如果我将错误悬停,我会收到消息:URI is not registered.
更奇怪的是,当我将一个旧的lilbrary返回到项目(正常的2.2)时,我仍然有同样的错误.
这可能是什么原因?
PS.我使用的IDE是IntelliJ IDEA.
我在XML应用程序窗口小部件提供程序中指定了android:label,但是当您执行Home-> Widgets - >时,未使用指定的名称...而是使用应用程序的名称,如果没有提供标签,则为默认值.配置中的尺寸正确使用.
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:initialLayout="@layout/widget_layout"
android:minWidth="146dp"
android:minHeight="146dp"
android:label="@string/widget_title"
android:updatePeriodMillis="21600000"
>
</appwidget-provider>
Run Code Online (Sandbox Code Playgroud)
然后在我的资源中:
<string name="widget_title">My Widget Name</string>
Run Code Online (Sandbox Code Playgroud)
小部件XML配置中引用的字符串资源由IDE验证,那么为什么不使用字符串资源?
我有一个MapView,上面有很多叠加标记.它有点工作,但在添加标记时往往会出现ANR,因为有很多标记.所以我把代码移到了AsyncTask中.一旦移动,代码就会中断,在渲染完成后从框架中冒出以下异常.错误似乎是间歇性的,但是覆盖项越多,发生的次数就越多.
造成这种异常的原因是什么?我该如何解决这个问题?
11-24 12:40:44.316: ERROR/AndroidRuntime(6607): FATAL EXCEPTION: main
java.lang.ArrayIndexOutOfBoundsException: length=0; index=2
at com.google.android.maps.ItemizedOverlay.getIndexToDraw(ItemizedOverlay.java:211)
at com.google.android.maps.ItemizedOverlay.draw(ItemizedOverlay.java:240)
at com.company.myapp.MyOverlay.draw(TaxiOverlay.java:43)
at com.google.android.maps.Overlay.draw(Overlay.java:179)
at com.google.android.maps.OverlayBundle.draw(OverlayBundle.java:42)
at com.google.android.maps.MapView.onDraw(MapView.java:530)
at android.view.View.draw(View.java:10982)
at android.view.ViewGroup.drawChild(ViewGroup.java:2899)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.ViewGroup.drawChild(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.ViewGroup.drawChild(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.ViewGroup.drawChild(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.ViewGroup.drawChild(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.ViewGroup.drawChild(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.ViewGroup.drawChild(ViewGroup.java:2897)
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2495)
at android.view.View.draw(View.java:10883)
at android.widget.FrameLayout.draw(FrameLayout.java:450)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2106)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2005)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1613)
at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2418)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4340)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) …Run Code Online (Sandbox Code Playgroud) 源 HTML 字符串(包括符号)来自 strings.xml 资源文件,并且注定要显示在 WebView 中。我已经在资源中对此进行了测试:
\n\n<string name="MY_STRING">\xc2\xae</string>\nRun Code Online (Sandbox Code Playgroud)\n\n®®失败,项目无法构建。这是将字符串资源推送到 WebView 的代码:
\n\nString html = getString(R.string.MY_STRING);\n((WebView)findViewById(R.id.terms_web_view)).loadData(html, "text/html", "UTF-8");\nRun Code Online (Sandbox Code Playgroud)\n\n我也尝试过这个,但没有帮助:\n webView.getSettings().setDefaultTextEncodingName("UTF-8");
\n\n我将 HTML 字符串推送到 Logcat,它看起来很好 - 它正确显示了符号。那么,如果字符串没问题,并且 WebView 设置为使用 UTF-8,为什么符号无法正确显示?
\n\n更新\n我在其他设备上进行了测试。我只能在 Android v4.04 上的 Galaxy Nexus 上重现此问题。在 Nexus One v2.3.x、Wildfire S(v2.3.x)和 Samsung Tab 10.1(v3.2)上,它运行良好。我更改了问题标题以澄清这是 ICS 问题。
\n我正在使用RoboSpice进行Retrofit.我正在调用REST调用,但是一个调用是一个问题,因为从不调用响应侦听器 - onRequestFailure()和onRequestSuccess()
...用户选择UI选项后
CreateCustomerRequest createCustomerRequest = new CreateCustomerRequest("1001", "John", "Smith");
this.getSpiceManager().execute(createCustomerRequest, new CreateCustomerRequestListener());
private class CreateCustomerRequestListener implements com.octo.android.robospice.request.listener.RequestListener<ErrorResponse> {
@Override
public void onRequestFailure(SpiceException spiceException) {
// Never called
}
@Override
public void onRequestSuccess(ErrorResponse errorResponse) {
// Never called
}
}
Run Code Online (Sandbox Code Playgroud)
public class CreateCustomerRequest extends RetrofitSpiceRequest<ErrorResponse, EmbarApi> {
private String id;
private String firstName;
private String lastName;
public CreateCustomerRequest(String id, String firstName, String lastName) {
super(ErrorResponse.class, EmbarApi.class);
this.id = id;
this.firstName = firstName;
this.lastName= lastName;
}
@Override
public …Run Code Online (Sandbox Code Playgroud)