簡體   English   中英

當從擴展插件的類中調用時,為什么調用擴展活動的類不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM