Я только начинаю изучать кодирование для Android-приложения, следуя книге «Разработка Android-приложений для чайников», чтобы создать приложение переключения в тихом режиме.
В коде все выглядит нормально (нет ошибки, кроме предупреждения о том, что:
"Приведение 'findViewById (R.id.phone_icon)' к 'ImageView' является избыточным. Эта проверка сообщает о ненужных выражениях приведения."
Я прочиталподобная проблема здесь ( Сбои приложения - Переключение в тихом режиме - Android для чайников ), и он говорит, чтобы попытаться:
1) Изменить "расширяет ActionBarActivity", чтобы просто "расширяет активность" и импортировать - шахта уже есть.
2) удалить или прокомментировать 'if' в методе onCreate out - у шахты нет этого раздела.
3) изменить параметр setContentView на: R.layout.fragment_main - не очень уверен, что это значит, но, похоже, не имеет отношения к моему коду? (его коды и мой немногоразные)
MainActivity.java код
package com.dummies.silentmodetoggle;
import android.app.Activity;
import android.media.AudioManager;
import android.os.Bundle;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.dummies.silentmodetoggle.util.RingerHelper;
public class MainActivity extends Activity {
AudioManager audioManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
setContentView(R.layout.activity_main);
FrameLayout contentView =
(FrameLayout) findViewById(R.id.content);
contentView.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
RingerHelper.performToggle(audioManager);
updateUi();
}
});
}
private void updateUi() {
ImageView imageView = (ImageView) findViewById(R.id.phone_icon);
int phoneImage = RingerHelper.isPhoneSilent(audioManager)
? R.mipmap.ringer_off
: R.mipmap.ringer_on;
imageView.setImageResource(phoneImage);
}
@Override
protected void onResume(){
super.onResume();
// Update our UI in case anything has changed.
updateUi();
}
}
RingerHelper.java
В книге говорится, что создать файл Java по адресу: "src / main/java/com/dummies/silentmodetoggle/util/RingerHelper.java "но не указали, как это сделать.Так как у меня нет папки util, поэтому я создал пакет (New> Package) в "src / main / java / com.dummies.silentmodetoggle" и добавил в папку util файл Java RingerHelper.Обратите внимание, если это проблема?Код выглядит следующим образом:
package com.dummies.silentmodetoggle.util;
import android.media.AudioManager;
public class RingerHelper {
// private to prevent users from creating a RingerHelper object
private RingerHelper(){}
/* Toggles the phone's silent mode */
public static void performToggle(AudioManager audioManager) {
// If the phone is currently silent, then unsilence it. If
// it's currently normal, then silence it.
audioManager.setRingerMode(
isPhoneSilent(audioManager)
? AudioManager.RINGER_MODE_NORMAL
: AudioManager.RINGER_MODE_SILENT);
}
/* Returns whether the phone is currently in silent mode. */
public static boolean isPhoneSilent(AudioManager audioManager){
return audioManager.getRingerMode()
== AudioManager.RINGER_MODE_SILENT;
}
}
Ошибка LogCat при нажатии кнопки приложения
2018-12-01 22:11:44.029 30122-30122/com.dummies.silentmodetoggle E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dummies.silentmodetoggle, PID: 30122
java.lang.SecurityException: Not allowed to change Do Not Disturb state
at android.os.Parcel.readException(Parcel.java:1683)
at android.os.Parcel.readException(Parcel.java:1636)
at android.media.IAudioService$Stub$Proxy.setRingerModeExternal(IAudioService.java:962)
at android.media.AudioManager.setRingerMode(AudioManager.java:1022)
at com.dummies.silentmodetoggle.util.RingerHelper.performToggle(RingerHelper.java:13)
at com.dummies.silentmodetoggle.MainActivity$1.onClick(MainActivity.java:60)
at android.view.View.performClick(View.java:5610)
at android.view.View$PerformClick.run(View.java:22265)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6077)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)
2018-12-01 22:11:44.672 1315-1315/? E/EGL_emulation: tid 1315: eglCreateSyncKHR(1901): error 0x3004 (EGL_BAD_ATTRIBUTE)
В противном случае приложение работает нормально, т.е.когда я нажимаю кнопку громкости на самом устройстве, чтобы отключить звук, изображение приложения изменится на тихое и наоборот.Он просто падает, когда я пытаюсь нажать на изображение самого приложения.
Я действительно понятия не имею, что происходит.Пожалуйста помоги.Большое спасибо!