当我告诉它时,屏幕不会暗淡

时间:2012-07-19 18:39:34

标签: android

当我通过通知调用活动时,我正试图让我的屏幕昏暗。这是我正在使用的代码:

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 0.01f;
getWindow().setAttributes(lp);  

也许我在这里做错了,如果有的话,有人会告诉我发生了什么,以及为什么它不按照预期的方式工作?!

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;


public class NoteMe extends Activity {
/** Called when the activity is first created. */
NotificationManager nm;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    String title = "Example text";
    String contentText = "Full hello world!";
    String text = "Starting Notification!";

    nm = (NotificationManager) this
            .getSystemService(Context.NOTIFICATION_SERVICE);
    long when = System.currentTimeMillis();
    int icon = R.drawable.ic_launcher;

    Intent intent = new Intent(getBaseContext(), MainActivity.class);
    PendingIntent contentIntent = PendingIntent.getActivity(
            getBaseContext(), 0, intent, 0);

    Notification notification = new Notification(icon, text, when);
    notification.setLatestEventInfo(getBaseContext(), title, contentText,
            contentIntent);
    notification.flags = Notification.FLAG_ONGOING_EVENT;
    int NOTIFICATION_ID = 10;
    nm.notify(NOTIFICATION_ID, notification);
}
}

这是请求的代码

3 个答案:

答案 0 :(得分:0)

尝试这样的事情 - 在设置属性后刷新屏幕。

    WindowManager.LayoutParams lp = getWindow().getAttributes();
    lp.screenBrightness =0.01f
    getWindow().setAttributes(lp);

    startActivity(new Intent(this,RefreshScreen.class));

因此,刷新屏幕的一个方法是启动虚拟活动,而不是在创建虚拟活动时调用finish();所以亮度的变化才能起作用。

答案 1 :(得分:0)

您发布的代码只会使您的应用程序的屏幕变暗。如果这就是你想要的,那很好。但是,如果您想在手机上调暗屏幕,则需要更改系统设置System.SCREEN_BRIGHTNESS

    // turn on manual control of system screen brightness
    Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);

    final int dimBrightnessValue = 96;  // valid values 0-255
    // change the brightness value
    System.putInt(getContentResolver(), System.SCREEN_BRIGHTNESS, dimBrightnessValue);

您还需要将以下内容添加到AndroidManifest.xml

<!-- Needed for changing screen brightness -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

答案 2 :(得分:0)

您的代码是100%正确的。有两种可能性,第一种是最有可能的

1)活动未被通知取消。我相信有一种特殊的方式可以从涉及待处理意图的通知中解雇。我猜这就是问题所在。只是为了确保在onCreate和onStart中放置一些断点以查看它是否被调用。或者只是在代码附近放一条日志语句,看它是否被调用。我猜它永远不会被召唤。

2)你正在进行0.1f的调整是不可见的。

请查看此内容并确保收到通知:

http://www.vogella.com/articles/AndroidNotifications/article.html

我看到的一个区别是getContextBase()与此

如果它看起来不像MainActivity.class清单声明可能不正确。