Как запустить Intent в сторонней статической функции? - PullRequest
1 голос
/ 16 мая 2019

Я следую этому руководству, чтобы начать работу с Bluetooth: https://www.youtube.com/watch?v=y8R2C86BIUc

Я хочу передать поддержку Bluetooth в отдельный класс и вызвать его из MainActivity.

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

Я попытался импортировать:

android.support.v7.app.AppCompatActivity;
android.support.v4.content.ContextCompat;

Но в обоих случаях это не сработало.

Без какого-либо импорта Android Studio сообщает: «Не удается разрешить метод»

MAIN

package com.example.lenkzeitapplikation_01;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        startBT.switch_BT_ON();
    }

}

STARTBT

import android.bluetooth.BluetoothAdapter;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.support.v4.content.ContextCompat;

import com.fleetboard.sdk.lib.android.log.Log;


public class startBT {

    private static final String Tag ="StartBT";
    static BluetoothAdapter mBluetoothAdapter;

    public static void switch_BT_ON(){
        if(mBluetoothAdapter == null){
            Log.d(Tag, "No BT adapter");
        }if(!mBluetoothAdapter.isEnabled()){
            Intent enableBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
           startActivity(enableBTIntent);

             //mBluetoothAdapter.enable();
        }

    }

}

Использование import android.support.v4.content.ContextCompat:

Ошибка: метод startActivity в классе ContextCompat не может быть применен кданные типы;Обязательно: контекст, намерение, пакет найден: причина намерения: фактические и формальные списки аргументов различаются по длине

1 Ответ

1 голос
/ 16 мая 2019

Важно

Хорошо, обо всем по порядку: Activity является одним из различных типов Context. А ТАКЖЕ: startActivity - это метод, который есть у Context объектов.

Объяснение

Если вы хотите запустить Activity, вы должны использовать объект Context. Вот почему он работал в первую очередь, в вашем MainActivity.

Теперь, когда вы переместили код в другой класс, если вы хотите использовать метод startActivity, у вас должна быть ссылка на объект Context.

Но ... Как?

public class startBT {

    public static void switch_BT_ON(Context context){
        //... Your logic
        context.startActivity(intent);
    }
}

В вашей деятельности:

startBT.switch_BT_ON(this);

Параметр this - это сам MainActivity, который по определению является Context.

Это означает, что:

switch_BT_ON требуется Context.

MainActivity говорит: «Вот, используй меня».

Рекомендации Это классическое, основное ООП мышление. Изучите объектно-ориентированное программирование, классы и наследование, чтобы узнать, почему метод startActivity работал на Acivity, а не вне его, передавая объекты вокруг и обрабатывая различные области.

Прочитайте быстрый ответ о , что такое Android Context. Или отправьтесь в путешествие по документации .

...