Android 5.1 - 当我从通知托盘更改配置时如何更新 UI 更改?
Android 5.1 -How do i update the UI change when i change configuration from notification tray?
我有一个简单的应用程序,可以将静音模式切换为正常模式,反之亦然。但问题是我只需拖动通知托盘即可将模式从静音更改为正常,我希望其中的音量图标也更改为正常图标。
当我下拉托盘通知时应用程序进入哪个状态?
现在当我从托盘点击静音到正常模式时,我应该把我的更新方法放在哪个方法来反映变化。
ui更新
我试过 callinf updateUI 方法 onResume 但没有成功,因为应用程序似乎没有暂停。
MainActivity.java
package com.example.manis.silentmodetoggle;
import android.app.Activity;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
public class MainActivity extends Activity {
private AudioManager audioManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("myTest","called onCreate");
setContentView(R.layout.activity_main);
//reference to the audio manager
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
FrameLayout contentView = (FrameLayout) findViewById(R.id.content);
updateUi();
contentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RingerHelper.performToggle(audioManager);
updateUi();
}
});
}
private void updateUi(){
ImageView imageView = (ImageView) findViewById(R.id.imageView);
//Set The PhoneImage
int phoneImage =RingerHelper.isPhoneSilent(audioManager) ? R.drawable.noaudio_96: R.drawable.highvolume_96 ;
imageView.setImageResource(phoneImage);
}
@Override
protected void onStart() {
super.onStart();
Log.v("myTest","Called onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.v("myTest","Called onResume");
updateUi();
}
@Override
protected void onPostResume() {
super.onPostResume();
Log.v("myTest","Called onPostResume");
}
@Override
protected void onPause() {
super.onPause();
Log.v("myTest","Called onPause");
}
}
package com.example.manis.silentmodetoggle;
import android.media.AudioManager;
public class RingerHelper {
private RingerHelper(){};
public static void performToggle(AudioManager audioManager)
{
//if the phone is currently silent then set ot normal
//if normal then set to silent
audioManager.setRingerMode(
isPhoneSilent(audioManager)? AudioManager.RINGER_MODE_NORMAL : AudioManager.RINGER_MODE_SILENT
);
}
public static boolean isPhoneSilent(AudioManager audioManager){
return audioManager.getRingerMode() == AudioManager.RINGER_MODE_SILENT;
}
}
ps:这是来自 Android App development from dummies book 的示例应用程序。
通知栏被下拉或拉起时没有任何直接回调。它旨在与应用程序分离。话虽这么说,但您可以尝试一些事情。
首先,您可以编写一个服务来定期轮询铃声状态。不是理想的解决方案,但这绝对有效。
其次,您可以尝试实施 onWindowFocusChanged(),如下所示:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if(hasFocus) {
// check ringer status
}
}
如果您希望能够以编程方式从您的应用程序中扩展状态栏,您可以包含此权限:
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
我有一个简单的应用程序,可以将静音模式切换为正常模式,反之亦然。但问题是我只需拖动通知托盘即可将模式从静音更改为正常,我希望其中的音量图标也更改为正常图标。
当我下拉托盘通知时应用程序进入哪个状态?
现在当我从托盘点击静音到正常模式时,我应该把我的更新方法放在哪个方法来反映变化。
ui更新
我试过 callinf updateUI 方法 onResume 但没有成功,因为应用程序似乎没有暂停。
MainActivity.java
package com.example.manis.silentmodetoggle;
import android.app.Activity;
import android.media.AudioManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
public class MainActivity extends Activity {
private AudioManager audioManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("myTest","called onCreate");
setContentView(R.layout.activity_main);
//reference to the audio manager
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
FrameLayout contentView = (FrameLayout) findViewById(R.id.content);
updateUi();
contentView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
RingerHelper.performToggle(audioManager);
updateUi();
}
});
}
private void updateUi(){
ImageView imageView = (ImageView) findViewById(R.id.imageView);
//Set The PhoneImage
int phoneImage =RingerHelper.isPhoneSilent(audioManager) ? R.drawable.noaudio_96: R.drawable.highvolume_96 ;
imageView.setImageResource(phoneImage);
}
@Override
protected void onStart() {
super.onStart();
Log.v("myTest","Called onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.v("myTest","Called onResume");
updateUi();
}
@Override
protected void onPostResume() {
super.onPostResume();
Log.v("myTest","Called onPostResume");
}
@Override
protected void onPause() {
super.onPause();
Log.v("myTest","Called onPause");
}
}
package com.example.manis.silentmodetoggle;
import android.media.AudioManager;
public class RingerHelper {
private RingerHelper(){};
public static void performToggle(AudioManager audioManager)
{
//if the phone is currently silent then set ot normal
//if normal then set to silent
audioManager.setRingerMode(
isPhoneSilent(audioManager)? AudioManager.RINGER_MODE_NORMAL : AudioManager.RINGER_MODE_SILENT
);
}
public static boolean isPhoneSilent(AudioManager audioManager){
return audioManager.getRingerMode() == AudioManager.RINGER_MODE_SILENT;
}
}
ps:这是来自 Android App development from dummies book 的示例应用程序。
通知栏被下拉或拉起时没有任何直接回调。它旨在与应用程序分离。话虽这么说,但您可以尝试一些事情。
首先,您可以编写一个服务来定期轮询铃声状态。不是理想的解决方案,但这绝对有效。
其次,您可以尝试实施 onWindowFocusChanged(),如下所示:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if(hasFocus) {
// check ringer status
}
}
如果您希望能够以编程方式从您的应用程序中扩展状态栏,您可以包含此权限:
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />