如何在外包静态函数中启动 Intent?

How to start an Intent in an outsourced static function?

我正在按照本教程开始使用蓝牙: https://www.youtube.com/watch?v=y8R2C86BIUc

我想将蓝牙启用外包给一个单独的 class 并从 MainActivity 调用它。

我制作了新的 Intent,但是按照视频我无法启动 Intent。

我尝试导入:

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

但这两种情况都没有成功。

没有任何导入 Android Studio 告诉 "Can't resolve method"

主要

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();
    }

}

开始BT

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:

Error: method startActivity in class ContextCompat cannot be applied to given types; required: Context,Intent,Bundle found: Intent reason: actual and formal argument lists differ in length

重要

好的,首先要做的是: ActivityContext 的不同类型之一。 和: startActivityContext 个对象拥有的方法。

说明

如果你想启动一个Activity,你必须使用一个Context对象。这就是为什么它首先在您的 MainActivity.

中起作用的原因

现在您已将代码移至另一个 class,如果您想使用方法 startActivity,则必须引用 Context 对象。

但是……怎么办?

public class startBT {

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

在你的 activity:

startBT.switch_BT_ON(this);

this 参数是 MainActivity 本身,根据定义是 Context

意思是:

switch_BT_ON 需要 Context.

MainActivity 表示:"Here, use me".

建议 这就是classic,基本的OOP思想。研究 Object-Oriented 编程、classes 和继承,了解为什么 startActivity 方法在 Acivity 上起作用,而不是在它之外,传递对象并处理不同的范围。

阅读关于 what is an Android Context. Or adventure yourself through the documentation 的快速回答。