Мое приложение падает при запуске, и я не уверен, почему - PullRequest
0 голосов
/ 02 июня 2019

Я создаю приложение, которое отключает и включает звук устройства, но оно падает, когда я его открываю. Я понятия не имею, почему он делает это, и очень хотел бы помочь. Вот код:


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. И в основном скомпилировал этот код из разных источников в интернете.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 июня 2019

Я использовал ответ DHAVAL ASODARIYA , но мне пришлось добавить немного больше, чтобы я ответил сам.

Я заменил ниже определение переменной,

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);
}

Чтобы проверить, есть ли у него доступ, а если нет, перейдите на страницу, чтобы сделать это.

Это исправило исключение безопасности, которое вызвало фатальную ошибку, и теперь приложение работает без сбоев.

0 голосов
/ 03 июня 2019

Я проверил ваш код.Перед созданием приложения определена ненужная переменная.Вам нужно внести несколько изменений.

Заменить ниже определение переменной,

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

на это,

AudioManager audioManager;

А в методе onCreate заменить строку ниже,

AudioManager am = (AudioManager)getSystemService(AUDIO_SERVICE);

с этим,

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