Как получить Android Контекст, используя Robolectri c 4.3.1 - PullRequest
0 голосов
/ 04 марта 2020

Попытка использовать Robolectri c 4.3.1 для выполнения большинства основных c из Android действий, получить контекст.

Я получаю ненулевой контекст, выполняя это (пробовал много другие попытки, но в итоге все получают context = null):

Context context  = RuntimeEnvironment.systemContext;

Я могу передать объект в некоторые методы, но никогда не смогу его использовать.

Если я попытаюсь

File dir = context.getFilesDir();

Я получу

java.lang.RuntimeException: No data directory found for package android

Что я делаю не так?

Вот мой код:

@RunWith(RobolectricTestRunner.class)
@Config(sdk = Build.VERSION_CODES.O)
public class BtScannerTests
{
    private BluetoothAdapter bluetoothAdapter;

    @Before
    public void setUp() throws Exception
    {
        bluetoothAdapter = Shadow.newInstanceOf(BluetoothAdapter.class);
    }

    private static boolean done = false;
    @Test
    public void testBtScannerCycle() throws InterruptedException
    {
        IntermediaryCallback intermediaryCallback = new IntermediaryCallback()
        {
        @Override
        public void onReceiveMdsIntermediary(MdsIntermediary mds, int connectionHandle)
        {

        }

        @Override
        public void onReceiveMetricIntermediaries(List<MetricIntermediary> metricList, MdsIntermediary mds, int connectionHandle)
        {

        }
        };

        StatusEventCallback statusEventCallback = new StatusEventCallback()
        {
        @Override
        public void onStatusEvent(StatusEvent statusEvent, int connectionHandle, String btAddress)
        {
            System.out.println("Status event " + statusEvent.name());
            if(statusEvent == StatusEvent.SCANNING_PAUSED);
            {
                done = true;
            }
        }
        };

        Context context  = RuntimeEnvironment.systemContext;
        File dir = context.getFilesDir();  // This is the code that fails; put here to test attempts
        AndroidBtManager.setStatusEventCallback(statusEventCallback);
        AndroidBtManager androidBtManager =
            new AndroidBtManager(context, intermediaryCallback, false, false, true);
        BtScanner btScanner = androidBtManager.getBtScanner();
        while(!done)
        {
            Thread.sleep(1000);
        }

    }
}

1 Ответ

0 голосов
/ 10 марта 2020

Используйте это.

Context context  = ApplicationProvider.getApplicationContext();

вместо

Context context  = RuntimeEnvironment.systemContext;
...