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裡面,在
(下篇)會介紹。
BroadcastReceiver trigger ANR
今天發現某支app丟出了一個ANR!
看了一下LOG!
發現是由BroadcastReceiver丟出來的!
看了一下官方ANR的有關說明!
才發現!!!
原來一個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,大家要注意一下了!!
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");
}
}