Прослушивание изменений в AudioManager.RINGER_AUDIO_CHANGES и последующее отображение диалогового окна - PullRequest
0 голосов
/ 03 июля 2018

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

Мне действительно нужна помощь, чтобы понять это, поэтому, пожалуйста, помогите мне, указав все в контексте кода, который вы можете отправить, а не просто ссылки на то, что я мог сделать.

public class MainActivity extends AppCompatActivity {
private Context mContext;
private Activity mActivity;

private LinearLayout mRootLayout;
private Button mBtnRingerVolume;
private TextView mTVStats;

Random mRandom = new Random();

private NotificationManager mNotificationManager;
private AudioManager mAudioManager;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Get the application context
    mContext = getApplicationContext();
    mActivity = MainActivity.this;

    // Get the widget reference from xml layout
    mRootLayout = findViewById(R.id.root_layout);
    mTVStats = findViewById(R.id.tv_stats);
    mBtnRingerVolume = findViewById(R.id.btn_ringer_volume);

    // Get the notification manager instance
    mNotificationManager = (NotificationManager) 
    getSystemService(NOTIFICATION_SERVICE);

    // Get the audio manager instance
    mAudioManager = (AudioManager) getSystemService(AUDIO_SERVICE);

    mBtnRingerVolume.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            // If do not disturb mode on, then off it first
            turnOffDoNotDisturbMode();

            // Get the ringer current volume level
            int current_volume_level = mAudioManager.getStreamVolume(AudioManager.STREAM_RING);

            // Get the ringer maximum volume
            int max_volume_level = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_RING);

    // Get a random volume level in specified range
    int random_volume = mRandom.nextInt(((max_volume_level-0)+1)+0);

    // Set the ringer volume
    mAudioManager.setStreamVolume(
            AudioManager.STREAM_RING,
            random_volume,
            AudioManager.FLAG_SHOW_UI
    );

    // Display the updated status on text view
    mTVStats.setText("Ringer Current Volume : " + current_volume_level);
    mTVStats.append("\nRinger Max Volume : " + max_volume_level);
    mTVStats.append("\nRinger new volume : " + random_volume);
}
});
}

// Custom method to turn off do not disturb mode programmatically
protected void turnOffDoNotDisturbMode(){
    if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){ // If api level minimum 23
        // If notification policy access granted for this package
        if(mNotificationManager.isNotificationPolicyAccessGranted()){{
            if(mAudioManager.getStreamVolume(AudioManager.STREAM_RING)== 0){
                // If do not disturb mode on, then off it
                // Set the interruption filter to all, allow all notification
                mNotificationManager.setInterruptionFilter(mNotificationManager.INTERRUPTION_FILTER_NONE);
                // Show a toast
                Toast.makeText(mContext,"Turn OFF Do Not Disturb Mode",Toast.LENGTH_SHORT).show();
            }
        }
        }else {
            // Show a toast
            Toast.makeText(mContext,"Going to get grant access",Toast.LENGTH_SHORT).show();

            // If notification policy access not granted for this package
            Intent intent = new Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);
            startActivity(intent);
        }
    }
}
}

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

...