2012年10月26日 星期五

動態註冊BroadCastReceiver

前一篇是在說明 利用AndroidMainifest去註冊BroadcastReceiver

這篇來介紹如何始用程式來動態註冊BroadcastReceiver 不需直接在AndroidMainifest寫死指定

在要註冊的程式寫下

IntentFilter message = new IntentFilter("mybroadcast");



  若要新增broadcast Receiver的話   可以利用addAction的指令   例如  
message.addAction("broadcast2"); 
  然後和上一篇一樣去實作Broadcast Receiver並extends BroadcastReceiver   然後去new出來你要註冊的地方
MyReceiver receiver = new MyReceiver(); 


並註冊偵聽broadcast

registerReceiver(receivr,message);



  若要發送broadcast的話   就下
sendBroadcast( new Intent(broadcast)); 


這樣在MyReceiver內就會收到發送的broadcast了

若要取消監聽Broadcast則下

unregisterReceiver(receiver);




注意的一點就是如果已經取消過監聽的Broadcast的註冊

又再去叫一次unregisterReceiver的話

會跳出IllegalArgumentException的error

所以我們可以使用 try catch去預防這個錯誤發生

可以下
try{
   unregisterReceiver(receiver);
}
   catch(IllegalArgumentException)
{
   Toast.makeText(MainActivity.this,"已經取消過了啦!笨蛋!", Toast.LENGTH_SHORT).show
}


來預防



2012年10月23日 星期二

BroadCastReceiver收到簡訊通知


在Android要實現 收到簡訊通知出上方的訊息其實很容易,

只要實作BroadcastReceiver這個功能就可以了,

首先要先到AndroidMainifest.xml設定uses-permission

再去註冊指定的BroadcastReceiver



開一個指定的class去extends BroadCastReceiver


再開啟DDMS發送簡訊模擬,

找不到DDMS的人可以由window→open perspectiv→other裡面找到DDMS面版




按下sned就可以由DDMS發送SMS到模擬器 

會出現下方跳出通知的訊息

點開訊息就會看見剛才輸入的簡訊內容了








2012年10月18日 星期四

第一個iphone APP「我的健康管理MyHealthApp APP」上架!

我的健康管理MyHealthApp


===================

千呼萬喚始出來

我做的第一個APP終於上架了

其實做完將近兩個月了

但上架的過程有點艱辛

過程就不闡述了

反正apple有疑惑就等待時間又要再後延

為了趕上架

此版的還是舊版的呢==

新版還在等待中

舊版有小bug所以就將就一下等待新版上架發佈吧

可以去app store查詢

我的健康管理MyHealthApp













是免費軟體喔~!

評分請給多一點的星星吧~



2012年10月16日 星期二

使用ACS發push notification到Android手機

Titanium有個cloud服務提供了push notification

今天將進行使用  ACS 來傳送notification

先登入 ACS

選擇你要發送notification的app名稱

點選  Manage ACS 再輸入帳號密碼

因為是開發測試

所以又上要記得點選 Development

移至最下面點選Users

再點Create a Users

把資料填一填 待會會用到email與密碼

填完按下 create User

再點 左上方的Back to App Management 回去

點選push notification

然後開始寫程式


使用Titanium設定tiapp.xml


    <modules>
        <module platform="commonjs" version="2.3.0">ti.cloud</module>
        <module platform="android">ti.cloudpush</module>
    </modules>

新增紅色的

接下來請參考  這裡



2012年10月11日 星期四

push notification for iphone

試了很久的 push notification for iphone

終於

試出來了!

感謝 JustFly 的協助

---------------------------------------

詳細可以參考 這篇

靜下心花點時間按照此步驟一步一步的做

應該可以做到最後產生 .pem檔

此篇在後續titanium的部分





---------------------------------------


// this sets the background color of the master UIView (when there are no windows/tab groups on it)
Titanium.UI.setBackgroundColor('#000');

var win = Titanium.UI.createWindow({
    title : 'Tab 1',
    backgroundColor : '#fff'
});
Titanium.Network.unregisterForPushNotifications;
Ti.API.info("unregisterForPushNotifications");
Titanium.Network.registerForPushNotifications({
        types:[
                
                Ti.Network.NOTIFICATION_TYPE_ALERT,
                Ti.Network.NOTIFICATION_TYPE_BADGE,
                Ti.Network.NOTIFICATION_TYPE_SOUND
        ],
        
        success: successCallback,
        error: errorCallback,
        callback: messageCallback
});

function successCallback(e) {
        alert(e);
        alert( e.deviceToken+'');
        var deviceToken = e.deviceToken;
        // var deviceToken=Ti.Network.remoteDeviceUUID;
         // alert('deviceToken:' + Ti.Network.remoteDeviceUUID);
}

// error callBack
function errorCallback(e) {
        alert(e);
        alert('Push errorCallback' + e.error +'');
}

// message callBack
function messageCallback(e) {
        alert(e);
        alert('Push messageCallback');
}


win.open();


------------------------
記得 e.deviceToken+''要轉成字串才可以抓到deviceToken


抓到deviceToken之後

將deviceToken貼到網站裡的simplePush.php的範例

為了讓push notification能夠傳遞中文

所以要多加上轉換成UTF-8編碼


$message = '傳遞中文通知!';
$message = iconv('Big5','UTF-8',$message);

由於發佈發現一直無法出現傳遞成功的字樣

後來發現式pem路徑問題

我也是將pem放在同樣www的資料夾 (我使用appserv)但就抓不到

後來將程式改成


$apnsCert = dirname(__FILE__) . '/' . 'ck.pem';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert',  $apnsCert );

這樣就可一順利發佈push notification了