我正在尝试以编程方式在android中展开通知栏。我曾尝试使用下列程式码:
private void ExpandNotificationBar(){
if(ContextCompat.checkSelfPermission(this, Manifest.permission.EXPAND_STATUS_BAR) != PackageManager.PERMISSION_GRANTED)
return;
try{
Object service = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method expand = statusbarManager.getMethod("expand");
expand.invoke(service);
}
catch (Exception e){
Log.e("StatusBar", e.toString());
Toast.makeText(getApplicationContext(), "Expansion Not Working", Toast.LENGTH_SHORT).show();
}
}然而,这将返回
java.lang.NoSuchMethodException: expand []我无法找到这方面的解决方案,因为该方法甚至不在官方API中。
任何帮助都是非常感谢的。谢谢。
编辑
到目前为止,我只在模拟器中尝试过这个方法。我会再次在这里张贴,如果我发现任何新的尝试时,真正的智能手机。
EDIT_v2:在实际设备上试用。但没有成功。我注意到的一件事是,没有向用户请求权限。即使我在检查它。
Android清单文件
<uses-permission android:name="android.permission.EXPAND_STATUS_BAR"/>请求许可
private void GetPermissions(){
if(ContextCompat.checkSelfPermission(this, Manifest.permission.EXPAND_STATUS_BAR) != PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.EXPAND_STATUS_BAR}, 1);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode){
case 1: {
if(grantResults.length == 0 || grantResults[0] != PackageManager.PERMISSION_GRANTED)
Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_SHORT).show();
}
}
}GetPermission()方法仅在OnCreate函数中调用。
发布于 2019-01-15 12:00:15
java.lang.NoSuchMethodException: expand []这个错误说android.app.StatusBarManager类没有一个名为expand.you的方法可以检查这个类的这里方法。
android.app.StatusBarManager有expandNotificationsPanel到
展开“通知”面板。
然后,在代码中,我们应该找到带有反射的expandNotificationsPanel方法
private void ExpandNotificationBar(){
if(ContextCompat.checkSelfPermission(this, Manifest.permission.EXPAND_STATUS_BAR) != PackageManager.PERMISSION_GRANTED)
return;
try{
Object service = getSystemService("statusbar");
Class<?> statusbarManager = Class.forName("android.app.StatusBarManager");
Method expand = statusbarManager.getMethod("expandNotificationsPanel"); //<-
expand.invoke(service);
}
catch (Exception e){
Log.e("StatusBar", e.toString());
Toast.makeText(getApplicationContext(), "Expansion Not Working", Toast.LENGTH_SHORT).show();
}
}发布于 2019-01-15 11:46:30
需要添加所需的权限,即:"android.permission.EXPAND_STATUS_BAR“
https://stackoverflow.com/questions/54198094
复制相似问题