日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Broadcast偷懶,AlarmManager悲劇

系統 1698 0

?

這幾天在做安卓比武場第三上的定時設置壁紙效果(這個活動不錯,希望大家踴躍參加),想要達到多定時的效果,就是設置多個換壁紙的效果。我使用 AlarmManager 進行進行定時發送換壁紙廣播,出現了一個問題就是 onreceive 收到都是第一個廣播的 intent.

下面我給出關鍵代碼而原代碼,有興趣的讀者可以下載代碼去運行下,你會發現一個讓我昨天到兩點多才睡的問題

這些是發送信息的代碼

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);
		//設置時間
		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+"次發出"+id+""+a,Toast.LENGTH_SHORT).show();
		id++;
		a++;
	}
}
    
?

?

?

這個接受信息的代碼

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();
 }

 }
}
    
?

?


運行的結果是:


Broadcast偷懶,AlarmManager悲劇
Broadcast偷懶,AlarmManager悲劇
?
?
Broadcast偷懶,AlarmManager悲劇
?
Broadcast偷懶,AlarmManager悲劇

發現了嗎?雖然發出的數據在變,但是接受到了都是同樣的的。

昨天晚上我也被這個東西搞死了,或許你們不可能再為這個問題而煩擾了,因為我現在告訴你為什么會這樣 !

就是因為 Broadcast, 因為我們發送廣播,是把一個 intent 弄到這里面,但是 broadcast 偷懶了, 只要你放入

Intent 是一樣的,那么他發出的永遠都是第一個輸入的!

所以下面我們來是改變 intent action 來試試效果

我們來改下 main.jafva 文件代碼:

?

      
        //輸入action
intent.setAction("com.wjh.action");
      
    
?

?

?

改成

?

      
        //輸入action
intent.setAction("com.wjh.action"+id);
      
    
?

?

下面改下 MyReceive.java 的代碼

將整個 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(); }
        
      
    
?

?

那么來看看效果圖吧:


Broadcast偷懶,AlarmManager悲劇


Broadcast偷懶,AlarmManager悲劇
?
Broadcast偷懶,AlarmManager悲劇
?
Broadcast偷懶,AlarmManager悲劇
?

看似很簡單,但是如果你想要通過 alarmManager 進行傳送數據,那么你將悲劇了,因為你收到的永遠的都是第一份 , 所以所 Broacast 偷懶,那么 alarmManager 悲劇!

下面我給出兩個例子的完整源代碼附件:


?

?

?

Broadcast偷懶,AlarmManager悲劇


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 峡江县| 清水县| 旌德县| 林甸县| 浏阳市| 洪泽县| 灌南县| 衡阳县| 景泰县| 嫩江县| 东方市| 聂荣县| 清河县| 绥滨县| 泗阳县| 新兴县| 乐业县| 大悟县| 临邑县| 郎溪县| 拜城县| 赫章县| 福清市| 湟中县| 宁远县| 蚌埠市| 惠州市| 穆棱市| 汨罗市| 石楼县| 隆昌县| 锡林郭勒盟| 通州区| 云安县| 藁城市| 两当县| 尤溪县| 苍山县| 安多县| 汤阴县| 广南县|