如何在外包静态函数中启动 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
重要
好的,首先要做的是:
Activity
是 Context
的不同类型之一。
和:
startActivity
是 Context
个对象拥有的方法。
说明
如果你想启动一个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 的快速回答。
我正在按照本教程开始使用蓝牙: 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
重要
好的,首先要做的是:
Activity
是 Context
的不同类型之一。
和:
startActivity
是 Context
个对象拥有的方法。
说明
如果你想启动一个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 的快速回答。