小编Oll*_*e C的帖子

为什么Android C2DM推送消息并不总是到达?

我已经构建了一个功能正常的C2DM应用程序,通常它运行得很好,推送消息快速到达.但是,当我第一次启动应用程序或重新启动应用程序时,我发现相当频繁,但消息不会到达.

它们肯定是成功发送的(我得到200响应)并且消息格式肯定是正确的(稍后发送相同的消息工作正常).失败可以持续很短的几分钟,然后突然它再次开始工作,然后一直工作.

然而,即使它开始工作,旧的消息显然已经消失,永远不会到达.这些消息肯定没有到达 - 我有大量的日志记录,突出显示任何到达的C2DM消息.

我完全清楚C2DM永远不会保证交付,所以我希望有些消息会失败,但根据我的经验,在某些情况下,它只是不起作用.我显然想知道我的应用程序或C2DM服务本身是否存在错误.

什么可能导致C2DM无法传递消息?如果无法传递消息,为什么C2DM服务器不会再次从其队列中尝试?相关 - 我应该仅在应用程序第一次启动时获取新的注册ID,还是每次应用程序启动时刷新它?我目前做的是后者(在应用程序中,而不是活动).

android android-c2dm

4
推荐指数
1
解决办法
2342
查看次数

如何缩放MapView以便它总是包含两个地理点?

我有两个间歇性变化的地理点,并希望MapView调整大小并进行平移以确保两个点始终可见.我可以轻松地将地图重新​​定位在两者之间的中间位置,但是如何设置缩放级别以确保我的两个点可见?

android android-mapview

4
推荐指数
1
解决办法
3593
查看次数

View.getLocationOnScreen()的单位和轴方向是什么?

View.getLocationOnScreen()返回View的X和Y坐标.

  • 单位是像素还是DIP?
  • 原产地在哪里?左上方?
  • 该位置指的是View的哪个角落?
  • 轴走哪条路?例如,320x480屏幕的四个角的坐标是什么?

android

4
推荐指数
1
解决办法
1806
查看次数

createChooser() 意图异常“需要导出提供程序,或 grantUriPermission()”

该应用程序需要与其他应用程序共享存储在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)

android android-contentprovider scoped-storage

4
推荐指数
1
解决办法
1462
查看次数

我应该在Android应用程序中将全局方法和变量放在哪里?

当我编写方法或使用成员变量时,我经常发现我需要在应用程序中共享它们.但他们应该去哪里?

我可以将Activity子类化,但是一旦我使用MapView并且被迫使用MapActivity就会失败,所以我的所有活动都不会从我的子类继承.我有办法解决这个问题吗?

在继承不适用的情况下,我倾向于将泛型方法和成员变量放入Application对象的子类中,但我发现它创建了一堆代码,因为每个类都需要通过via获取对应用程序对象的访问权限上下文,或者我必须把它传下来.

我怀疑我最好创建MyApplication.getInstance()并将所有内容保存在单例中,而不是通过应用程序类传递应用程序对象.但之前我想看看你们要说些什么.

android

3
推荐指数
1
解决办法
3200
查看次数

如果我更改外部库:AndroidManifest,则无法解析文件

我打开一个旧项目,其中注册了一个正常的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.

android intellij-idea android-manifest xml-parsing

3
推荐指数
1
解决办法
8890
查看次数

为什么我的AppWidget没有使用提供的标签?

我在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验证,那么为什么不使用字符串资源?

android android-widget

3
推荐指数
1
解决办法
548
查看次数

ItemizedOverlay中的ArrayIndexOutOfBoundsException

我有一个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)

android

3
推荐指数
1
解决办法
2078
查看次数

Android v4.0 WebView 中的 Display® 注册商标符号?

源 HTML 字符串(包括符号)来自 strings.xml 资源文件,并且注定要显示在 WebView 中。我已经在资源中对此进行了测试:

\n\n
<string name="MY_STRING">\xc2\xae</string>\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 使用资源中的实际商标符号 (\xc2\xae) 构建项目,但在 WebView 中显示时,它显示为“\xc3\x82\xc2\xae”(即“A”抑扬符,后跟注册的商标符号)商标符号) - 即显示两个字符,第一个不正确且不需要。
  • \n
  • 使用实体引用时我看到相同的结果,&#174;
  • \n
  • 使用&reg;失败,项目无法构建。
  • \n
\n\n

这是将字符串资源推送到 WebView 的代码:

\n\n
String html = getString(R.string.MY_STRING);\n((WebView)findViewById(R.id.terms_web_view)).loadData(html, "text/html", "UTF-8");\n
Run 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

android android-webview android-4.0-ice-cream-sandwich

3
推荐指数
1
解决办法
6282
查看次数

为什么没有调用Robospice响应侦听器方法?

我正在使用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)

android robospice

2
推荐指数
1
解决办法
1072
查看次数