![](/img/trans.png)
[英]Calling a variable or method in the activity class from a class that extends view?
[英]Why calling a class that extends Activity does not work when called from one that extends Plugin?
我有一個擴展插件 (PhoneGap)的Java類,但是在該類中,我調用了另一個擴展Activity的類,它根本不起作用! 我的意思是,它似乎沒有被調用。 為了確認這一點,這次我更改了第二節課,而不是從Activity擴展,並且效果很好。 我需要第二個來擴展Activity,因為我正在使用這兩個實用程序(getFileStreamPath和openFileOutput)來創建文件
文件filepath = getFileStreamPath(“ filename.CPCL”); 和openFileOutput FileOutputStream os = this.openFileOutput(fileName,Context.MODE_PRIVATE);
我有一個帶有擴展自定義Service
的類的應用程序,該類調用了另一個擴展Activity
類。
首先,我實例化活動。 在您的Plugin類的onCreate
中使用:
// get a handle on your Application
Application app = getApplication();
Intent intent = new Intent(getApplicationContext(), YourActivity.class);
app.startActivity(intent);
這將啟動您的活動並調用標准的生命周期事件。
我處理與正在運行的Activity的持續通信的方式是使用Handler
從插件發送廣播,Activity在其接收器中接收到該廣播。 在插件的onCreate
中:
mHandler.post(new Runnable() {
@Override
public void run() {
Log.d(TAG, "Call the Activity");
Intent intent = new Intent(YourActivity.CALL_FROM_PLUGIN);
intent.putExtra("request", <<Any extras you might want to send through>>);
sendBroadcast(intent);
}
});
在活動中,我聲明變量:
public static final String CALL_FROM_PLUGIN= "CALL_FROM_PLUGIN";
然后在onCreate()
添加了以下內容;
IntentFilter filter = new IntentFilter();
filter.addAction(CALL_FROM_PLUGIN);
registerReceiver(mBroadcastReceiver, filter);
然后實現了BroadcastReceiver
:
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.d(TAG, "BroadcastReceiver.onReceive()");
if (CALL_FROM_PLUGIN.equals(action)) {
Log.d(TAG, "Received call from Plugin");
// DO YOUR STUFF HERE
}
}
};
也許其他人可以從框架的角度指出為什么這樣做是必要的,但這是我理解應該調用Activity的方式。 我希望這與您的服務類一樣適用於您的插件類!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.