2015-11-29 56 views
1

我想調用BroadcastReceiver方法來執行代碼,而用戶不使用應用程序,但我不知道我該如何做到這一點。如何將BroadcastReceiver方法調用到另一個方法?

下面的代碼:

public class MainActivity extends Activity{ 

    private BroadcastReceiver intentReceiver = new BroadcastReceiver(){ 
     // this method is what I want to call 
    } 

    public static void Toast(Context context, Intent intent){ 
     // this is where I want to call the BroadcastReceiver 
    } 
} 

我已經收到和使用的廣播接收器的作爲是什麼我的應用程序應該是作品發送短信。 我現在想要解決的唯一問題是,如何在MainActivity中執行代碼,同時我的應用程序未被用戶使用?因爲我發現在其他活動中的BroadcastReceiver是應用程序不使用時唯一運行的。 在我的應用程序中,我使用SharedPreferences來保存和更新應用程序。就像如果應用程序接收到「ON」,on按鈕將顯示,off按鈕將隱藏,否則。現在已經很好了。 前一段時間,我嘗試從MainActivity.java調用toReceiver()方法到SMSReceiver.java(它只運行後臺包含BroadcastReceiver),以查看我調用的方法是否會執行包含toast.maketext()的方法toast()方法。是的,它執行,因爲吐司消息出現。

現在,我想如果我只是把應用程序使用時執行的SharedPreferences代碼放在那個toast()方法上,它也會像toast()方法運行一段時間一樣執行,而我的問題將得到解決。但是,我不知道我怎麼能做到這一點,因爲我不能調用代碼在那裏的方法。請幫忙。

回答

0

您需要定義廣播應響應一個動作:

public static final String ACTION_NAME = "com.application.ACTION";

要爲聽衆發送Intent來反應:

Intent intent = new Intent(ACTION_NAME); 
intent.putExtra(OPTIONAL_EXTRA_KEY, "your optional extra value"); 
yourContext.sendBroadcast(intent); 

爲了聽廣播您需要定義一個Receiver對象。

private final BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // React to the broadcast. 
    } 
}; 

現在,你必須註冊該廣播接收器:

IntentFilter filter = new IntentFilter(ACTION_NAME); 
yourActivity.registerReceiver(receiver, filter); 

並註銷:

yourActivity.unregisterReceiver(receiver); 

我通常註冊在的onResume和的onPause註銷,但您的應用程序可能需要以不同地方。

+1

我已收到併發送短信。我現在唯一的問題是如何將該方法放到另一個方法中。我試圖把靜態廣播接收器,但一些紅色下劃線的代碼我得到了一個錯誤。 – Jobelle

0

其他方式比透視是我已經做了解決我的問題。在靜態方法,你不能叫一個BroadcastReceiver,因爲BroadcastReceiver的方法是不是靜態方法,你不能把靜態的話就可以像什麼我

public static void(Context context, Intent intent){ 

} 

靜態是靜態的和非靜態的非靜態的。

因爲我只是想在應用程序沒有使用時調用SharedPreferences來保存數據,所以我只是把SharedPreferences:SharedPreferences的初始化,編輯並保存在我的靜態方法中。問題解決了!

0

如果你想在用戶不使用你的應用時執行一些代碼,你必須使用服務。我真的建議你使用IntentService

相關問題