私は Flex Mobile アプリの仕組みに慣れていないので、返信で説明してください。
私が作成したサービス アプリからインテントを受け取ることができる Android 用の Flex Mobile アプリを作成しようとしています。インテントには文字列が添付されており、アプリがその情報を取得することが非常に重要です。ただし、サービス アプリから送信されたインテントを Flex アプリで受信する方法がわかりません。
これまでのところ、 onReceive() が呼び出されるのに十分な時間を確保できることを期待して、アプリをネイティブ Android 側で 3 秒間一時停止させようとしました。これはうまくいきませんでした。
以下は私のコードです。私はあなたの助けに感謝します。
WiFi 機能は、サービスにインテントを送信して、Android で WiFi を有効にします。
WiFi_info 関数は、このアプリが受け取るインテントに添付されたデータを返すことになっています。
ANESimpleApp.as - ActionScript ライブラリ
package com.example.anesimpleapp
{
import flash.external.ExtensionContext;
public class ANESimpleApp
{
// This will hold the context for the Native Android side of the plugin
private var context:ExtensionContext;
// Get a context of the ANE
public function ANESimpleApp()
{
// Checks if the context was already setup
if(!context)
{
context = ExtensionContext.createExtensionContext("com.example.anesimpleapp", null);
}
}
// Turn On/Off the Wifi
public function WiFi(): void
{
context.call("WiFi", null);
}
// Get WiFi information
public function WiFi_Info(): String
{
return String (context.call("WiFi_info", null));
}
}
}
WiFi_info.java - ネイティブ Android コード
public class WiFi_info implements FREFunction {
// This will retrieve information about the WiFi network the phone is currently connected to
public String connectionData = "EMPTY";
// This is used to reference the string value describing the WiFi network the phone is currently connected to.
public final String KEY_WiFi_Info = "Update_WiFi_Info";
// The expected intent
public final String WiFi_Data = "com.example.Obtain_WiFi_Data";
// Created a Runnable object
Runnable myRun;
@Override
public FREObject call(FREContext context, FREObject[] object) {
// The runnable object will be used to allow enough time for the BroadcastReceiver to set itself up
myRun = new Runnable() {
@Override
public void run()
{
// Causes this activity to wait 3 second.
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
// Sets up intent filter and BroadcastReceiver
// This intent filter will allow the application to receive certain intents
IntentFilter filter = new IntentFilter();
// This allows the application to receive data about the WiFi
filter.addAction(WiFi_Data);
// Registers the BroadcastReceiver onReceive() in this app
context.getActivity().registerReceiver(mybroadcast, filter);
// Generates a 3 second pause
Thread myThread = new Thread(myRun);
myThread.start();
// Returns the information obtained from onReceive()
// This will be used to hold the value returned from the function
FREObject returnValue = null;
try {
// Obtains a string containing information about the WiFi network the phone is
// currently connected to.
returnValue = FREObject.newObject(connectionData);
} catch (FREWrongThreadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
// Unregisters the BroadcastReceiver (Don't want any leaked receivers)
context.getActivity().unregisterReceiver(mybroadcast);
// Returns value
return returnValue;
}
// Receives the intent and places extra in class variable
public BroadcastReceiver mybroadcast = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent)
{
if(intent.getAction().equalsIgnoreCase(WiFi_Data))
{
connectionData = intent.getStringExtra(KEY_WiFi_Info);
}
}
};
}
ANESimpleAppTestHomeView.mxml
<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView">
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<fx:Script>
<![CDATA[
import com.example.anesimpleapp.ANESimpleApp;
[Bindable(event="UpdateTime")]
private function WifiUpdate(): String
{
var ane:ANESimpleApp = new ANESimpleApp();
return ane.WiFi_info();
}
public function button1_WiFiActivation(event:MouseEvent):void
{
var ane:ANESimpleApp = new ANESimpleApp();
ane.WiFi();
}
public function button2_WiFiUpdater(event:MouseEvent):void
{
dispatchEvent(new Event("UpdateTime"));
}
]]>
</fx:Script>
<s:VGroup>
<s:HGroup>
<s:Button id="button1"
x="25"
y="27"
label="WiFi"
click="button1_WiFiActivation(event)"/>
<s:Button id="button2"
x="25"
y="27"
label="WiFi Info"
click="button2_WiFiUpdater(event)"/>
</s:HGroup>
<s:TextArea id="WiFiInfo"
width="65%"
editable="false"
borderVisible="false"
contentBackgroundColor="0xFFFFFF"
contentBackgroundAlpha="0"
height="400"
text="{WifiUpdate()}"/>
</s:VGroup>
</s:View>