1. 程式人生 > >BroadcastReceiver類中呼叫activity的函式

BroadcastReceiver類中呼叫activity的函式

最近在做一個有關android的app,裡面要實現在BroadcastReceiver中接收了推送來的訊息之後,改變螢幕亮度。
但是改變螢幕亮度首先要呼叫當前Activity的getContentResolver(),但是無奈,我在BroadcastReceiver中根本得不到那個Activity。
後來我就想著public void onReceive(Context context, Intent intent)這個裡面的context引數應該就是那個activity把,強制轉換成了Activity,結果瞬間爆炸,唉,果然還是不行。
後來又參考了一些的程式碼,才發現了一種解決方案,跟大家分享,希望能幫到大家:
首先是,接受了訊息後的處理(這裡的MainActivity就是我要呼叫的當前的Activity)

public void changeLight(Context context,String content){
Log.d(TAG, “updateLight”);
//Utils其實就是一個存放全域性變數的類,雖然Java本來就沒有全域性變數,這裡的logStringCache就是個String型的靜態變數
//這裡用了一個String型變數主要是因為我改變亮度需要確定變到多少,這裡是引數,如果你要呼叫的函式不用引數的話,也就不用這個了
Utils.logStringCache = content;

            Toast.makeText(context, Utils.logStringCache+"Receiver", 5000).show();

    Intent intent = new Intent();
    intent.setClass(context.getApplicationContext(), MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    context.getApplicationContext().startActivity(intent);

    }

在MainActivity中過載你的onResume()方法

@Override
public void onResume() {
super.onResume();
//更新函式
update();
}
然後你就在MainActivity中寫你的update函式就好了,當然需要引數的話記得去之前的全域性變數裡面取,這樣就算是完成了在BroadcastReceiver中呼叫Activity的函數了