Adsense for mobile content(android放置Google 廣告【上】)

18 September 2010

Adsense for mobile content

注意!這篇是for mobile content

for mobile content

是用來給手機網站放置的。

並不能放置android裡面去。

not for mobile application

當然也有for mobile application

for mobile application只有在美國、加拿大開放而已啊!囧!

但是可以利用一些漏洞在android放置google adsense。

(注意!但是Google是不允許這樣的XD,但是不知道就算用了,Google會怎處理)

反正就先教學吧!

想要在Android裡放置Google廣告,

那麼必須請先去Google Adsense的網站註冊,
https://www.google.com/adsense/report/overview

並點選Adsense行動內容廣告(Adsense for mobile content)

然後先選擇廣告類型】:不用作任何修改,直接按繼續 

在來是廣告風格】:這邊就依個人,看你廣告頁面的顏色配置

在來是【選擇廣告頻道】:這裡不要設定任何channel,除非要測試某些特定類型的廣告。

在來就是【取得廣告程式碼】

取得您的Adsense程式碼後(javascript)










將這段code上傳至您的網站上,

(注意!是貼您的那段CODE,不是我這段,如果貼我的,人家點擊,也是我在賺==我是不介意XD)

這裡我就上傳至我的GAE上,(http://ken-mis.appspot.com)

記得,只有手機的瀏覽器才看得到廣告!

至於怎麼放置在android app裡面,在(下篇)會介紹。
















read more »


BroadcastReceiver trigger ANR

09 September 2010

BroadcastReceiver trigger  ANR

今天發現某支app丟出了一個ANR!

看了一下LOG!

發現是由BroadcastReceiver丟出來的!

看了一下官方ANR的有關說明!

才發現!!!

BroadcastReceiver hasn't finished executing within 10 seconds

原來一個BroadcastReceiver要在十秒之內完成,否則會丟出一個ANR!

雖然我知道一個long operation盡量在service中完成,

但我不知道BroadcastReceiver的限制time out 這麼短!!!

BroadcastReceiver的說明文件中也有提到!

(there is a timeout of 10 seconds that the system allows before considering the receiver to be blocked and a candidate to be killed

所以大家在send Broadcast,大家要注意一下了!!





read more »


android DB on SD Card 新增、查詢(DB 2/2)

04 September 2010

android insert value to DB、select value from DB

這篇文章會介紹

如何新增資料到sqllite database,並在database作查詢等動作

上一篇已經介紹如何在sd card新增資料庫

這裡就只略過如何新增資料庫,直接說明新增and查詢的動作

public class db_sample {
public static final String STR_TABLE_NAME = "table_name"; //table名稱
public static final String STR_FIELD_ID = "field_id"; //欄位名稱
public static final String STR_FIELD_NAME = "field_name"; //欄位名稱
private static Context context;

public db_sample(Context context) {
this.context = context; //new這個class時,一定要傳入context,因為openOrCreateDatabase是由context底下的method
}

//建立table的method
public static final void fnCreateDB(){
//MODE_WORLD_WRITEABLE,只能有寫的權限
SQLiteDatabase dbwrite
= context.openOrCreateDatabase("/sdcard/hi_test.db", context.MODE_WORLD_WRITEABLE, null);

//建立table
String sql =
String.format("CREATE TABLE %s (%s INTEGER primary key autoincrement, %s text )"
, STR_TABLE_NAME
, STR_FIELD_ID
, STR_FIELD_NAME
);
dbwrite.execSQL(sql);
}

//新增資料的method
public static final long fnInsert(String strText){
SQLiteDatabase dbwrite
= context.openOrCreateDatabase("/sdcard/hi_test.db", context.MODE_WORLD_WRITEABLE, null);
ContentValues cv = new ContentValues();
cv.put(STR_FIELD_NAME, strText);
return dbwrite.insert(STR_TABLE_NAME, null, cv);//如果return -1代表有錯誤,否則會return該筆資料在第幾列
}

//撈資料的method
public static final int fnRead(String strText){
//MODE_WORLD_WRITEABLE,只能有讀取的權限
SQLiteDatabase dbread
= context.openOrCreateDatabase("/sdcard/hi_test.db",context. MODE_WORLD_READABLE, null);


Cursor cursor
= dbread.rawQuery(
"select "+STR_FIELD_ID+" from "+STR_TABLE_NAME+" where "+STR_FIELD_NAME+"=?",
new String[] {strText}
);

if (cursor.moveToFirst()) {
return cursor.getInt(0);
}
return -1;
}

}




呼叫方法就如下:

public class test extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
db_sample db = new db_sample(this);
db.fnCreateDB();
db.fnInsert("HI");
int iID = db.fnRead("HI");
}

}

read more »