我的应用程序在启动时崩溃,我不确定为什么

My app is crashing at startup and I am unsure why

我正在制作一个可以将设备静音和取消静音的应用程序,但是当我打开它时它崩溃了。我不知道为什么要这样做,真的很想得到一些帮助。这是代码:


package com.earthmonster.testmute4;

 

import androidx.appcompat.app.AppCompatActivity;

 

import android.content.Context;

import android.media.AudioManager;

import android.os.Bundle;

 

public class MainActivity extends AppCompatActivity {

 

 

 

   

 

 

    AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE);

 

    @Override

 

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

 

 

        AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);

        int volume_level=am.getStreamVolume(AudioManager.STREAM_MUSIC);

        if (volume_level > 0)

        {

            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);

            audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, 0, 0);

            audioManager.setStreamVolume(AudioManager.STREAM_RING, 0, 0);

            audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 0, 0);

            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 0, 0);

 

        }

        else {

            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 100, 0);

            audioManager.setStreamVolume(AudioManager.STREAM_SYSTEM, 100, 0);

            audioManager.setStreamVolume(AudioManager.STREAM_RING, 100, 0);

            audioManager.setStreamVolume(AudioManager.STREAM_NOTIFICATION, 100, 0);

            audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, 100, 0);

        }

        finish();

    }

}


有人能解决问题吗!我是这方面的绝对初学者。没有 java 经验。无 android 开发经验。并且主要是从互联网上的各种来源编译此代码。

提前致谢。

我已经检查了你的代码。创建应用程序之前定义了不必要的变量。您需要做一些更改。

替换下面的变量定义,

AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE);

有了这个,

AudioManager audioManager;

然后在 onCreate 方法中,替换下面一行,

AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);

有了这个,

audioManager = (AudioManager)getSystemService(AUDIO_SERVICE);

我使用了 DHAVAL ASODARIYA's 答案,但不得不多加一点,所以我会自己回答。

我替换了下面的变量定义,

AudioManager audioManager = (AudioManager)getApplicationContext().getSystemService(Context.AUDIO_SERVICE);

有了这个,

AudioManager audioManager;

然后在 onCreate 方法中,替换下面一行,

AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);

有了这个,

audioManager = (AudioManager)getSystemService(AUDIO_SERVICE);

我加了

     <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY" />

到清单,因为它需要请勿打扰访问 并添加了这个

NotificationManager notificationManager = 
    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
    && !notificationManager.isNotificationPolicyAccessGranted()) {

    Intent intent = new Intent(
                        android.provider.Settings
                        .ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);

    startActivity(intent);
}

检查它是否有访问权限,如果没有,去页面做。

这修复了导致致命错误的安全异常,现在该应用程序可以完美运行。