# “Sketch launched on the device”, but black screen on the phone

**URL:** <https://discourse.processing.org/t/sketch-launched-on-the-device-but-black-screen-on-the-phone/8338>\
**Category:** Processing for Android\
**Created:** [February 13, 2019, 1:00am UTC](https://discourse.processing.org/t/sketch-launched-on-the-device-but-black-screen-on-the-phone/8338 "2019-02-13T01:00:19Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![lf.parra](https://avatars.discourse-cdn.com/v4/letter/l/9f8e36/32.png) [@lf.parra](https://discourse.processing.org/u/lf.parra)\
**Post date:** [February 13, 2019, 1:00am UTC](https://discourse.processing.org/t/sketch-launched-on-the-device-but-black-screen-on-the-phone/8338/1 "2019-02-13T01:00:19Z")

</div>

Hi! I have a code working at all. It runs everything and finds sketch’s data. The only error is a deprecated method, but it is underlined yellow, so I think it should not affect.

It says _Sketch launched on the device_ , but on my phone it appears a fast flash and then a black screen when the app is opened.

Pd: I use Processing 3.5.3 on Windows 10 Pro and my phone runs Android 5.1 Lollipop.  
Sorry, I am beginner. I am not sure if there is an issue on Android mode version, Processing versions, Android API level or permissions.

Thank you very much 😊

```auto
import ketai.sensors.*;
import android.media.MediaPlayer;
import android.content.res.AssetFileDescriptor;
import android.media.AudioManager;

KetaiSensor sensor;

float minSize = 150 * displayDensity;
float maxSize = 300 * displayDensity;
ArrayList<ColorDot> dots;
int stepCount = 0;
int updateTime = 0;
float walkSpeed = 0;
int numNotes = 5;
AudioPlayer [] notes = new AudioPlayer[numNotes];
int lastNote = int(random(1) * 4);

void setup() {
  fullScreen();
  orientation(LANDSCAPE);
  colorMode(HSB, 360, 100, 100, 100);
  noStroke();
  for (int i = 0; i < numNotes; i++) notes[i] = new AudioPlayer();
  notes[0].loadFile(this, "Piano.mf.A1.mp3");
  notes[1].loadFile(this, "Piano.mf.G1.mp3");
  notes[2].loadFile(this, "Piano.mf.E1.mp3");
  notes[3].loadFile(this, "Piano.mf.D1.mp3");
  notes[4].loadFile(this, "Piano.mf.C1.mp3");
  dots = new ArrayList<ColorDot>();
  sensor = new KetaiSensor(this);
  sensor.start();
}

void draw() {
  background(0, 0, 0);
  for (int i = dots.size() - 1; i >= 0 ; i--) {
    ColorDot d = dots.get(i);
    d.update();
    d.display();
    if (d.colorAlpha < 1) {
      dots.remove(i);
    }
  }
}

class ColorDot {
  float posX, posY;
  float rad, maxRad;
  float colorHue, colorAlpha;
  int note;
  
  ColorDot() {
    posX = int(random(1, width/maxSize)) * maxSize;
    posY = int(random(1, height/maxSize)) * maxSize;
    rad = 0.1;
    float speedf = constrain(walkSpeed, 0, 2)/2.0;
    maxRad = map(speedf, 1, 0, minSize, maxSize);
    selectNote();
    colorHue = map(note, 0, 4, 0, 360);
    colorAlpha = 70;
  }

  void selectNote() {
    float r = random(1);
    note = lastNote;
    if (r < 0.4) note--;
    else if (r > 0.6) note++;
    if (note < 0) note = 1;
    if (4 < note) note = 3;
    notes[note].play();
    lastNote = note;
  }

  void update() {
    if (rad < maxRad) {
      rad *= 1.5;
    } else {
      colorAlpha -= 0.1;
    }
  }

  void display() {
    fill(colorHue, 100, 100, colorAlpha);
    ellipse(posX, posY, rad, rad);
  }
}

void onStepDetectorEvent() {
  int now = millis();
  stepCount++;
  if (5000 < now - updateTime) {
    walkSpeed = stepCount/5.0;
    stepCount = 0;
    updateTime = now;
  }
  dots.add(new ColorDot());
}

class AudioPlayer extends MediaPlayer {
  boolean loadFile(PApplet app, String fileName) {
    AssetFileDescriptor desc;
    try {
      desc = app.getActivity().getAssets().openFd(fileName);
    } catch (IOException e) {
      println("Error loading " + fileName);
      println(e.getMessage());
    return false;
    }

    if (desc == null) {
      println("Cannot find " + fileName);
      return false;
    }

    try {
      setDataSource(desc.getFileDescriptor(), desc.getStartOffset(), desc.getLength());
      setAudioStreamType(AudioManager.STREAM_MUSIC);
      prepare();
      return true;
    } catch (IOException e) {
      println(e.getMessage());
      return false;
    }
  }

  void play() {
    if (isPlaying()) seekTo(0);
    start();
  }
}

```

---

<div class="post-metadata">

**Author:** ![kfrajer](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/kfrajer/32/196_2.png) [@kfrajer](https://discourse.processing.org/u/kfrajer)\
**Post date:** [February 13, 2019, 5:07am UTC](https://discourse.processing.org/t/sketch-launched-on-the-device-but-black-screen-on-the-phone/8338/2 "2019-02-13T05:07:10Z")

</div>

The easiest way is to start by following [these instructions](https://android.processing.org/tutorials/getting_started/index.html). If it works, your environment is set.

Just an additional note. This definition is probably not legal:

```auto
float minSize = 150 * displayDensity;
float maxSize = 300 * displayDensity;

```

The reason is that you are accessing screen dimensions outside setup or draw. The size of the sketch is defined right when setup is run. This is true in Processing java but not sure if it holds 100% in Processing Android.

Kf

---

<div class="post-metadata">

**Author:** ![lf.parra](https://avatars.discourse-cdn.com/v4/letter/l/9f8e36/32.png) [@lf.parra](https://discourse.processing.org/u/lf.parra)\
**Post date:** [February 13, 2019, 2:12pm UTC](https://discourse.processing.org/t/sketch-launched-on-the-device-but-black-screen-on-the-phone/8338/3 "2019-02-13T14:12:21Z")

</div>

Thank you @kfrajer. I have already followed the instructions. I am re ordering my code to fit those variables into draw.
