我正在尝试在Android Studio中以编程方式扩展通知栏。 我尝试使用以下代码:-
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();
}
}
}
仅在OnCreate函数中调用 GetPermission()方法。
答案 0 :(得分:1)
java.lang.NoSuchMethodException: expand []
此错误提示android.app.StatusBarManager
类没有名称为expand的方法。您可以检查此类here的方法。
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();
}
}
答案 1 :(得分:0)
需要添加所需的权限,即:“ android.permission.EXPAND_STATUS_BAR”