带有 'context.' 的代码示例在我粘贴时不起作用

Code examples with 'context.' do not work when I paste them

嗨,我是新手 Java 和 Android 程序员,如果这个问题有点愚蠢,我深表歉意。

我最近看到很多例子,其中投票最高的解决方案包含的代码在我将其剪切并粘贴到我的代码中时不会 resolve/run。

我的主要问题是我不知道如何将下面示例中给出的 'context.' 更改为 运行.

举个例子

我收到这个错误...

/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.dummies.silentmodetoggle, PID: 12988
    java.lang.SecurityException: Not allowed to change Do Not Disturb state
        at android.os.Parcel.createExceptionOrNull(Parcel.java:2285)
        at android.os.Parcel.createException(Parcel.java:2269)
        at android.os.Parcel.readException(Parcel.java:2252)
        at android.os.Parcel.readException(Parcel.java:2194)
        at android.media.IAudioService$Stub$Proxy.setRingerModeExternal(IAudioService.java:2835)
        at android.media.AudioManager.setRingerMode(AudioManager.java:1150)
        at com.dummies.silentmodetoggle.util.RingerHelper.performToggle(RingerHelper.java:20)
        at com.dummies.silentmodetoggle.MainActivity.onClick(MainActivity.java:41)
        at android.view.View.performClick(View.java:7350)
        at android.view.View.performClickInternal(View.java:7327)
        at android.view.View.access00(View.java:807)
        at android.view.View$PerformClick.run(View.java:28166)
        at android.os.Handler.handleCallback(Handler.java:907)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:216)
        at android.app.ActivityThread.main(ActivityThread.java:7464)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:955)
     Caused by: android.os.RemoteException: Remote stack trace:
        at com.android.server.audio.AudioService.setRingerModeExternal(AudioService.java:3169)
        at android.media.IAudioService$Stub.onTransact(IAudioService.java:1257)
        at android.os.Binder.execTransactInternal(Binder.java:1138)
        at android.os.Binder.execTransact(Binder.java:1102)
I/Process: Sending signal. PID: 12988 SIG: 9

The Solution is in:



When I cut and paste this code in:

    NotificationManager notificationManager = 
        (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
        && !notificationManager.isNotificationPolicyAccessGranted()) {

        Intent intent = new Intent(
                            android.provider.Settings
                            .ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);

        startActivity(intent);
    }

many of the parts do not initially work but after importing a few classes most of the issues go away apart from:

context.getSystemService(Context.NOTIFICATION_SERVICE); where it can't work out what to use for context

and 

startActivity(intent); where it cannot find the class or what to use for intent.

顺便说一句,我不是在寻找通知问题的答案,我正在寻求帮助以了解如何成功地将堆栈溢出代码粘贴到我的代码中并找出缺失部分的来源,特别是 'context.'。

我正在研究几本不同的 Android 学习书籍,包括 Android App Development for Dummies 这就是这个例子的来源。我已经通过使用带有 Lollipop 代码的模拟器获得了代码,因为这早于引入新的免打扰功能。

最后,我试图弄清楚如何使用参考指南,因为我来自大型机背景,他们似乎使用不同的方式来解释事情。

感谢所有帮助

干杯 克雷格

对,所以我已经挖了一点,现在得到它。

'context.' 是通用的,在这种情况下可以用 this.getBaseContext() 替换。

这是代码示例。

private void updateUI() {
        // Find the view named phone_icon in our layout. We know it's
        // an ImageView in the layout , so downcast it to an ImageView.
        ImageView imageView = (ImageView) findViewById(R.id.phone_icon);

        NotificationManager notificationManager;
        notificationManager = (NotificationManager) this.getBaseContext().getSystemService(Context.NOTIFICATION_SERVICE);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
                && !notificationManager.isNotificationPolicyAccessGranted()) {

            Intent intent = new Intent(
                    android.provider.Settings
                            .ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS);

            startActivity(intent);
        }