W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎勵(lì)
本節(jié)我們接著上一節(jié)"獲取電池電量"插件的示例,來完成 Android 端 API 的實(shí)現(xiàn)。以下步驟是使用 Java 的示例,如果您更喜歡 Kotlin,可以直接跳到后面 Kotlin 部分。
首先在 Android Studio 中打開您的Flutter應(yīng)用的Android部分:
android
文件夾,點(diǎn)擊 OKjava
目錄下打開 MainActivity.java
接下來,在onCreate
里創(chuàng)建 MethodChannel 并設(shè)置一個(gè)MethodCallHandler
。確保使用和 Flutter 客戶端中使用的通道名稱相同的名稱。
import io.flutter.app.FlutterActivity;
import io.flutter.plugin.common.MethodCall;
import io.flutter.plugin.common.MethodChannel;
import io.flutter.plugin.common.MethodChannel.MethodCallHandler;
import io.flutter.plugin.common.MethodChannel.Result;
public class MainActivity extends FlutterActivity {
private static final String CHANNEL = "samples.flutter.io/battery";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new MethodChannel(getFlutterView(), CHANNEL).setMethodCallHandler(
new MethodCallHandler() {
@Override
public void onMethodCall(MethodCall call, Result result) {
// TODO
}
});
}
}
接下來,我們添加 Java 代碼,使用 Android 電池 API 來獲取電池電量。此代碼和在原生 Android 應(yīng)用中編寫的代碼完全相同。
首先,添加需要導(dǎo)入的依賴。
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
import android.os.Bundle;
然后,將下面的新方法添加到 activity 類中的,位于 onCreate 方法下方:
private int getBatteryLevel() {
int batteryLevel = -1;
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
BatteryManager batteryManager = (BatteryManager) getSystemService(BATTERY_SERVICE);
batteryLevel = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY);
} else {
Intent intent = new ContextWrapper(getApplicationContext()).
registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
batteryLevel = (intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100) /
intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
}
return batteryLevel;
}
最后,我們完成之前添加的onMethodCall
方法。我們需要處理平臺方法名為getBatteryLevel
的調(diào)用消息,所以我們需要先在 call 參數(shù)判斷調(diào)用的方法是否為getBatteryLevel
。 這個(gè)平臺方法的實(shí)現(xiàn)只需調(diào)用我們在前一步中編寫的 Android 代碼,并通過result參數(shù)返回成功或錯(cuò)誤情況的響應(yīng)信息。如果調(diào)用了未定義的 API,我們也會通知返回:
@Override
public void onMethodCall(MethodCall call, Result result) {
if (call.method.equals("getBatteryLevel")) {
int batteryLevel = getBatteryLevel();
if (batteryLevel != -1) {
result.success(batteryLevel);
} else {
result.error("UNAVAILABLE", "Battery level not available.", null);
}
} else {
result.notImplemented();
}
}
現(xiàn)在就可以在 Android 上運(yùn)行該應(yīng)用程序了,如果使用的是 Android 模擬器,則可以通過工具欄中的"..."按鈕訪問 Extended Controls 面板中的電池電量。
使用 Kotlin 和使用 Java 的步驟類似,首先在 Android Studio 中打開您的 Flutter 應(yīng)用的 Android 部分:
android
文件夾,點(diǎn)擊 OK。kotlin
目錄中打開MainActivity.kt
。
接下來,在onCreate
里創(chuàng)建 MethodChannel 并設(shè)置一個(gè)MethodCallHandler
。確保使用與在 Flutter 客戶端使用的通道名稱相同。
import android.os.Bundle
import io.flutter.app.FlutterActivity
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugins.GeneratedPluginRegistrant
class MainActivity() : FlutterActivity() {
private val CHANNEL = "samples.flutter.io/battery"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)
MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
// TODO
}
}
}
接下來,我們添加 Kotlin 代碼,使用 Android 電池 API 來獲取電池電量,這和原生開發(fā)是一樣的。
首先,添加需要導(dǎo)入的依賴。
import android.content.Context
import android.content.ContextWrapper
import android.content.Intent
import android.content.IntentFilter
import android.os.BatteryManager
import android.os.Build.VERSION
import android.os.Build.VERSION_CODES
然后,將下面的新方法添加到 activity 類中的,位于 onCreate 方法下方:
private fun getBatteryLevel(): Int {
val batteryLevel: Int
if (VERSION.SDK_INT >= VERSION_CODES.LOLLIPOP) {
val batteryManager = getSystemService(Context.BATTERY_SERVICE) as BatteryManager
batteryLevel = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
} else {
val intent = ContextWrapper(applicationContext).registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
batteryLevel = intent!!.getIntExtra(BatteryManager.EXTRA_LEVEL, -1) * 100 / intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
}
return batteryLevel
}
最后,我們完成之前添加的onMethodCall
方法。我們需要處理平臺方法名為getBatteryLevel
的調(diào)用消息,所以我們需要先在 call 參數(shù)判斷調(diào)用的方法是否為getBatteryLevel
。 這個(gè)平臺方法的實(shí)現(xiàn)只需調(diào)用我們在前一步中編寫的 Android 代碼,并通過 result 參數(shù)返回成功或錯(cuò)誤情況的響應(yīng)信息。如果調(diào)用了未定義的 API,我們也會通知返回:
MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "getBatteryLevel") {
val batteryLevel = getBatteryLevel()
if (batteryLevel != -1) {
result.success(batteryLevel)
} else {
result.error("UNAVAILABLE", "Battery level not available.", null)
}
} else {
result.notImplemented()
}
}
您現(xiàn)在就可以在 Android 上運(yùn)行該應(yīng)用程序。如果您使用的是 Android 模擬器,則可以通過工具欄中的"..."按鈕訪問 Extended Controls 面板中的電池電量。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: