小编van*_*dzi的帖子

Android 7.0和7.1 getApplication()ClassCastException

在Developer Console中,我看到很多像这样的堆栈跟踪崩溃

java.lang.RuntimeException: 
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2984)
  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3045)
  at android.app.ActivityThread.-wrap14(ActivityThread.java:0)
  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1642)
  at android.os.Handler.dispatchMessage(Handler.java:102)
  at android.os.Looper.loop(Looper.java:154)
  at android.app.ActivityThread.main(ActivityThread.java:6776)
  at java.lang.reflect.Method.invoke(Native Method:0)
  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
Caused by: java.lang.ClassCastException: 
  at com.myapp.ui.BaseActivity.getApp(BaseActivity.java:193)
  at com.myapp.ui.BaseActivity.onCreate(BaseActivity.java:275)
  at com.myapp.ui.CastActivity.onCreate(CastActivity.java:39)
  at com.myapp.ui.MainActivity.onCreate(MainActivity.java:268)
  at android.app.Activity.performCreate(Activity.java:6955)
  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1126)
  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
Run Code Online (Sandbox Code Playgroud)

BaseActivity的getApp方法是

public App getApp() {
        return (App) getApplication();
    }
Run Code Online (Sandbox Code Playgroud)

App类是

public class App extends MultiDexApplication { ...
Run Code Online (Sandbox Code Playgroud)

并且在manifest应用程序标记中包含对此类的引用

 <application
        android:name="com.myapp.App"
Run Code Online (Sandbox Code Playgroud)

98%的崩溃是针对Android 7.0,休息是7.1.没有其他Android版本受到影响.

编辑:我使用proguard所以它可以以某种方式相关但保持类

-keep class com.myapp.** { *;}
-keep interface com.myapp.** { *;}
Run Code Online (Sandbox Code Playgroud)

注意:它可能没有关系,但在相同的Android版本中,它看起来像App的onCreate方法有时不被调用.我观察它是因为在onCreate中创建的某些对象在从Service(由AlarmManager启动)或BroadcastReceiver访问时为null

有谁知道什么可以导致它,如何解决它或解决它?谢谢

编辑2:我最终得到了这样的东西:

   public App getApp() …
Run Code Online (Sandbox Code Playgroud)

android android-7.0-nougat android-application-class

25
推荐指数
2
解决办法
1934
查看次数

微调器 - 专注于第一项

我使用带游标适配器的下拉微调器.它包含例如1 - 100项.我选择例如项目50.项目被选中.下次当我打开微调器时,第一个可见行是第50项.当我打开微调器时,我将如何实现它将聚焦到第一个项目/第一个可见项目将是项目1?

我的意思是像列表中的自动滚动一样,因此下拉列表中的第一个可见项目是第一个而不是一个.

android android-widget android-layout android-spinner

17
推荐指数
1
解决办法
7399
查看次数

Android 5(HTC)EACCES(权限被拒绝)

app无法在app拥有的目录中的外部存储folder/file上创建android 5(HTC HTC6525LVW os version: 5.0.1).

父文件夹由[getExternalFilesDirs(String type)][1]方法返回.

Sdcard 安装.

有其他人有这个问题或建议如何解决?

(不幸的是我没有这个设备来测试它)

编辑:从一个用户我知道,在此错误之前,她加密了SD卡,然后对其进行了格式化.

android android-file android-permissions android-5.0-lollipop

16
推荐指数
1
解决办法
1050
查看次数

你如何创建一个封闭的漏斗?

如何创建封闭漏斗?即我想看看有多少用户做了一些操作,然后卸载了应用程序.即.event_lost_game - >卸载.目前,渠道是开放的,因此它不会告诉您有多少用户制作了第1步,然后是第2步.它只显示了有多少用户单独制作了这两个步骤.

我在常见问题解答中找到了它,但不清楚你需要做什么.

看起来需要根据渠道中的所有事件创建开放渠道和受众,然后根据它过滤渠道.有经验的人吗?谢谢!

firebase firebase-analytics

16
推荐指数
1
解决办法
2972
查看次数

操作栏列表导航宽度 - 换行内容

默认情况下,在操作栏列表中,所选项目的导航宽度与最宽项目一样宽.我想在所选项目中"wrap_content",因为它在谷歌+,gmail,映射Android应用程序.

有人知道这么热吗?

我试图覆盖导航适配器的getView但它不起作用.它看起来这个视图被包含在另一个视图中,该视图的宽度最宽.我也尝试了带有微调器的actionbar.setCustom视图,但是微调器的行为是相同的.它使用最宽的项目宽度.

感谢所有建议,链接和帮助.

当前状态

要求的状态

android android-layout android-actionbar

11
推荐指数
1
解决办法
4231
查看次数

在MediaPlayer仍在准备时停止或释放它

这是一个错误还是在准备时不可能释放,停止或杀死MediaPlayer

我有一个MediaPlayer运行的实例,Service如果我停止,释放,将其设置为null,同时MediaPlayer处于准备状态,它会停止.但是,如果我停止,释放,如果它处于准备状态,则将其设置为null .

onPrepared()在停止,释放,设置为null后调用.一些解决方法吗?

我认为这是用户想要MediaPlayer在完成准备之前停止的常见用例.

android android-mediaplayer

10
推荐指数
1
解决办法
5736
查看次数

ConnectivityManager getActiveNetworkInfo空指针异常

我在连接管理器中偶尔会看到空指针异常.从意图服务我通过isOnWIFI(this)检查网络状态.在cm.getActiveNetworkInfo()行发生异常.这很奇怪,因为我在调用之前检查了null.注意:权限已设置.

public static boolean isOnWIFI(Context context) {
    ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

        return cm != null
                //here occurs NullPointerException
                && cm.getActiveNetworkInfo() != null
                && ((cm.getNetworkInfo(ConnectivityManager.TYPE_WIFI) != null && cm.getNetworkInfo(
                        ConnectivityManager.TYPE_WIFI).isConnected()));

}
Run Code Online (Sandbox Code Playgroud)

有没有想过为什么会这样?我无法调试它,因为它只是偶尔出现错误报告.我看到的唯一解决方案是将其放入try catch块.谢谢.

android android-service android-networking

9
推荐指数
3
解决办法
2万
查看次数

Android vitals - Stuck Wake Locks和前台服务

在开发者控制台 - Android vitals中,我看到警告该应用程序有"Stuck partial wake locks".在文档中,它被描述为

如果应用程序在后台运行时,部分唤醒锁定会被卡住(用户看不到应用程序的任何部分).

确实,应用程序在后台运行(播放音频),但我使用前台服务和整个时间应用程序保持锁定通知是可见的.

稍后您可以阅读文档

确保您应用的某些部分仍然在前台.例如,如果您需要运行服务,请改为启动前台服务.这可以直观地向用户显示您的应用仍在运行.

但它似乎不是真的.Android vitals是否忽略该app具有前台服务?有没有人有类似的经历?

编辑:这是来自我的AudioService的代码

PowerManager.WakeLock mWakeLock = null;
boolean mHasWakeLock;

void acquireLocks(){

    if (!mHasWakeLock) {
        final PowerManager pm = (PowerManager) 
        context.getSystemService(Context.POWER_SERVICE);
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,TAG);
        mWakeLock.setReferenceCounted(false);
        mWakeLock.acquire();
        mHasWakeLock = true;
    }
}

void releaseLocks() {
    if (mWakeLock != null) {
        mWakeLock.release();
        mWakeLock = null;
    }
    mHasWakeLock = false;
}

void play(){
    startForeground(NOTIFICATION_ID, notification);
    acquireLocks();
}

void stop(){
    releaseLocks();
    stopForeground(true);
}
Run Code Online (Sandbox Code Playgroud)

android google-play-console

9
推荐指数
1
解决办法
1064
查看次数

Android 5+ remoteviews涟漪效应

是否可能对作为远程视图一部分的按钮产生连锁效应?(使用自定义布局或窗口小部件的通知)

我尝试将按钮背景设置为drawable notification_material_media_action_background:

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
        android:color="@color/ripple_material_dark"/>
Run Code Online (Sandbox Code Playgroud)

但它没有效果.通知源代码中使用相同的背景,并且通知按钮会产生连锁反应.这是来自Notification source的代码,它创建了动作按钮(具有涟漪效果):

   private RemoteViews More ...generateMediaActionButton(Action action) {
            final boolean tombstone = (action.actionIntent == null);
            RemoteViews button = new RemoteViews(mBuilder.mContext.getPackageName(),
                    R.layout.notification_material_media_action);
            button.setImageViewResource(R.id.action0, action.icon);
            button.setDrawableParameters(R.id.action0, false, -1,
                    0xFFFFFFFF,
                    PorterDuff.Mode.SRC_ATOP, -1);
            if (!tombstone) {
                button.setOnClickPendingIntent(R.id.action0, action.actionIntent);
            }
            button.setContentDescription(R.id.action0, action.title);
            return button;
        }
Run Code Online (Sandbox Code Playgroud)

唯一不同的是这条线:

 button.setDrawableParameters(R.id.action0, false, -1,
                        0xFFFFFFFF,
                        PorterDuff.Mode.SRC_ATOP, -1);
Run Code Online (Sandbox Code Playgroud)

但是这个方法是@hide所以它不能被调用.

知道如何添加涟漪效果吗?谢谢!

android android-widget android-notifications android-remoteview material-design

7
推荐指数
1
解决办法
455
查看次数

如何在iOS中应用音频效果

我使用AVPlayer播放音频(流媒体或本地文件).对于这个音频,我想应用一些效果 - 提升音量,跳过静音,降低噪音,改变速度(以0.1为间隔).

我在android中通过创建自己的播放器,将不同的音频格式解码为pcm数据然后使用一些c库来修改它来做同样的事情.这很复杂.

是否可以使用AVPlayer或我该怎么做?类似于修改AVPlayer已解码的音频.是否有一些ios api(AVAudioEngine?)或框架(audioKit?)可以做到这一点?

谢谢!

ios avaudioengine audiokit

7
推荐指数
1
解决办法
230
查看次数