?
這幾天在做安卓比武場(chǎng)第三上的定時(shí)設(shè)置壁紙效果(這個(gè)活動(dòng)不錯(cuò),希望大家踴躍參加),想要達(dá)到多定時(shí)的效果,就是設(shè)置多個(gè)換壁紙的效果。我使用 AlarmManager 進(jìn)行進(jìn)行定時(shí)發(fā)送換壁紙廣播,出現(xiàn)了一個(gè)問題就是 onreceive 收到都是第一個(gè)廣播的 intent.
下面我給出關(guān)鍵代碼而原代碼,有興趣的讀者可以下載代碼去運(yùn)行下,你會(huì)發(fā)現(xiàn)一個(gè)讓我昨天到兩點(diǎn)多才睡的問題
這些是發(fā)送信息的代碼
main.java
?
package com.wjh.test; import java.util.Calendar; import android.app.Activity; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Toast; public class Main extends Activity implements OnClickListener { /** Called when the activity is first created. */ Button btn ; int id = 1; char a = 'a'; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btn = (Button)findViewById(R.id.button1); btn.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub Intent intent = new Intent(Main.this,MyReceive.class); //輸入action intent.setAction("com.wjh.action"); //輸入id intent.putExtra("id", id); //輸入字符 intent.putExtra("char",a); PendingIntent pi = PendingIntent.getBroadcast(Main.this, 0, intent, 0); //設(shè)置時(shí)間 Calendar c = Calendar.getInstance(); c.setTimeInMillis(System.currentTimeMillis()); c.add(Calendar.SECOND,5); AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pi); Toast.makeText(this,"第"+id+"次發(fā)出"+id+""+a,Toast.LENGTH_SHORT).show(); id++; a++; } }?
?
?
這個(gè)接受信息的代碼
MyReceive.java
?
public class MyReceive extends BroadcastReceiver{ public static int i=0; @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub if(intent.getAction().equals("com.wjh.action")) { int id = intent.getIntExtra("id", 0); char str = intent.getCharExtra("char", 'b'); Toast.makeText(context,"第"+(++i)+"次"+ id+""+str, Toast.LENGTH_SHORT).show(); } } }?
?
運(yùn)行的結(jié)果是:
發(fā)現(xiàn)了嗎?雖然發(fā)出的數(shù)據(jù)在變,但是接受到了都是同樣的的。
昨天晚上我也被這個(gè)東西搞死了,或許你們不可能再為這個(gè)問題而煩擾了,因?yàn)槲椰F(xiàn)在告訴你為什么會(huì)這樣 !
就是因?yàn)? Broadcast, 因?yàn)槲覀儼l(fā)送廣播,是把一個(gè) intent 弄到這里面,但是 broadcast 偷懶了, 只要你放入
Intent 是一樣的,那么他發(fā)出的永遠(yuǎn)都是第一個(gè)輸入的!
所以下面我們來(lái)是改變 intent 的 action 來(lái)試試效果
我們來(lái)改下 main.jafva 文件代碼:
?
//輸入action
intent.setAction("com.wjh.action");
?
?
?
改成
?
//輸入action
intent.setAction("com.wjh.action"+id);
?
?
下面改下 MyReceive.java 的代碼
將整個(gè) onReceive 方法的代碼改成下面的 :
public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub int id = intent.getIntExtra("id", 0); char a = intent.getCharExtra("char", 'b'); Toast.makeText(context,"第"+(++i)+"次受到"+ id+""+a, Toast.LENGTH_SHORT).show(); }
?
?
那么來(lái)看看效果圖吧:

?

?

?
看似很簡(jiǎn)單,但是如果你想要通過(guò) alarmManager 進(jìn)行傳送數(shù)據(jù),那么你將悲劇了,因?yàn)槟闶盏降挠肋h(yuǎn)的都是第一份 , 所以所 Broacast 偷懶,那么 alarmManager 悲劇!
下面我給出兩個(gè)例子的完整源代碼附件:
?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
