2014年11月30日 星期日

Android-曾遇到過的問題

若 extends ActionBarActivity 無法用
requsetWindowFeature ( Window.FEATURE_NO_TITLE );

若註冊頁面無法自動Search Activity
直接打PackageName

若 Create  A' Project by copy A Project, but A' Project R.id is A Project
Please copy A' Project package and rename (Don't the same old name)
Final, change packageName in AndroidManifest.xml .(Don't the same old name)

Service can' t running LocalBroadcastManager
Link : That

2014年11月20日 星期四

Android-Eclipse 更新 Android 5.0 API 21 appcompat_v7 會出現錯誤

各位更新完5.0一定迫不及待的想測試新的功能吧
但就在這時發現創立專案完成後 appcompat_v7 竟然出現一堆錯誤



error: Error retrieving parent for item: No resource found that matches the given name 'android:XXX'
....等。

解決的方法如下 :


更新SDK( 5.0 & Extras )到最新
project.properties 更改為 21



之後點選Clean 
appcompat_v7的錯誤就解決囉

2015.02.16 更新
將V7 的最小版本改為 : <uses-sdk android:minSdkVersion="21"/>
再將出問題的專案改為使用Android 5.0 第21版
再重新Clean
大致上的問題都迎刃而解了

參考來源 : 位置


2014年11月19日 星期三

Android-AndroidAnnotations 基本使用方式

簡化您的Android程式碼,專注於邏輯

第2 - 5點圖片是重複的
程式碼AndroidManifest.xml 部分要特別注意,目前使用Android 5.0

1 . 首先去GitHub下載Lib : AndroidAnnotations下載位置





























2 . 將 androidannotations-api-3.1.jar 匯入您的專案底下














3 . 在您專案創立 compile-libs 並且將 androidannotations-3.1.jar放入底下















4 . 點選專案底下的 Preperties -> Java Compiler -> AnnotationProcessing
     ( 若沒有此選項可以參考文章 )

-----此為無選項範例圖













-----此為無選項範例圖

5 . 將選項勾選起來















6 . 點選專案底下的 Preperties -> Java Compiler -> AnnotationProcessing -> Factory Path















7 . 點選確認後並且重新開啟Eclipse















8 . 程式碼測試 :

MainActivity.java
package com.example.androidannotations;

import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Fullscreen;
import org.androidannotations.annotations.LongClick;

import android.support.v7.app.ActionBarActivity;
import android.widget.Toast;

@Fullscreen
@EActivity(R.layout.activity_main)
public class MainActivity extends ActionBarActivity {

    /*
    @ViewById(R.id.textView)
    TextView textView;
     */
    
    @Click(R.id.button1)   
    void myButtonClicked() {  
        Toast.makeText(this, "測試成功", Toast.LENGTH_SHORT).show();
    } 

    @LongClick(R.id.textView)
    void startExtraActivity() {  
        Toast.makeText(this, "您有長按", Toast.LENGTH_SHORT).show();
    }

}


activity_main.xml
package com.example.androidannotations;

import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.Fullscreen;
import org.androidannotations.annotations.LongClick;

import android.support.v7.app.ActionBarActivity;
import android.widget.Toast;

@Fullscreen
@EActivity(R.layout.activity_main)
public class MainActivity extends ActionBarActivity {

    /*
    @ViewById(R.id.textView)
    TextView textView;
     */
    
    @Click(R.id.button1)   
    void myButtonClicked() {  
        Toast.makeText(this, "測試成功", Toast.LENGTH_SHORT).show();
    } 

    @LongClick(R.id.textView)
    void startExtraActivity() {  
        Toast.makeText(this, "您有長按", Toast.LENGTH_SHORT).show();
    }

}


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.androidannotations"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity_"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>


@EActivity(R.layout.activity_main)
Layout

@ViewById

1 . OnCreate
@UiThread
@AfterViews
void onAfterViews() {
}
註冊頁面更改為底線


點擊
@Click(R.id.btnTest) 
void testRest(){
}

下一頁
GiftDetailActivity_.intent(this).start();

A 發送
@Extra@InstanceStateString info;

B_.intent(this).info(mInfo).start();

B 接收
@Extra@InstanceStateString info;

接收端一定要先註冊參數,發送端才能傳送

參考網址 : 連結


Android-Android Eclipse 之 Java Compiler 沒有 Annotation Processin

各位是否有使用Androd Eclipse ?














但是使用Androidannotations卻找不到Java Compiler底下的Annotation Processing選項



恩,記得要去 Install Available Software 下載
work with : Juno - http://download.eclipse.org/releases/juno

Programming Languages -> Eclipse Java Develipment Tools




重新執行Eclipse後,你的Eclipse就有上述的功能了

2014年11月15日 星期六

Android-將物件 存放 / 讀取 Cache

各位跟我一樣是開發新手的大大們
想必多少都會遇到想暫存資料
是圖片那還有很多資訊可找
但如果是自訂的物件呢?
用 SharedPreferences 又有型別的限制
讓人超級頭痛的
這幾天不斷的用G大神搜索,終於在GitHub找到超好用的Class
但前提是,必須要將物件序列化 implements Serializable


import android.content.Context;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;

public class SimpleObjectCache {

    public static void saveObject(Object object, String id,Context context) {
 
        try {
            ObjectOutput out = new ObjectOutputStream(new FileOutputStream(
    new File(context.getCacheDir(), "") + "/"+id));
    
            out.writeObject(object);
            out.close();
   
        } catch (Exception e) {
            e.printStackTrace();
   
        }
    }

    public static Object loadObject(String id,Context context) 
   throws FileNotFoundException {
   
        Object object = null;
        ObjectInputStream in = null;
  
        try {
            in = new ObjectInputStream(new FileInputStream(
    new File(new File(context.getCacheDir(), "") + "/"+id)));
        
            object = in.readObject();
            in.close();
   
        }catch (IOException | ClassNotFoundException e){
            throw new FileNotFoundException();
   
        }
        return object;
  
    }
    
    public static Boolean removeObject(String id,Context context){
     File file = new File(new File(context.getCacheDir(), "") + "/"+id);
     return file.delete();
  
    }
}

* 服用方式
final String ID_BANDS = "bandsObejct";

// List of bands
ArrayList<String> bands = new ArrayList<String>();
bands.add("Arctic Monkeys");
bands.add("Led Zeppelin");
bands.add("Yann Tiersen");

// Saving
SimpleObjectCache.saveObject(bands, ID_BANDS, getApplicationContext());

// Retrieving
try {
    ArrayList<String> bandsTemp = (ArrayList<String>) SimpleObjectCache
            .loadObject(ID_BANDS, getApplicationContext());
    for (String string : bandsTemp) {
        Log.d("BANDS", string);
    }
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

// Deleting
Boolean wasRemoved = SimpleObjectCache.removeObject(ID_BANDS,
        getApplicationContext());

資料來源 : https://github.com/wesleiwpa/simple-object-cache-android

2014年11月13日 星期四

Android- 如何啟動 Service 服務程式 ( 一 )

Android 應用程式四大組成員之一 : Service
Service跟Activity建立方法非常相似
Service被啟動後,就算關閉ActivityService不會因此而關閉
就像是我們在手機執行音樂撥放,我們還是可以執行其他的程式

首先,我們先創立Activity 並且用 Intent啟動 Service

Activity.class 底下

啟動Service
Intent startIntent = new Intent(this, ServiceTest.class);  
startService(startIntent);


關閉Service
Intent stopIntent = new Intent(this, ServiceText.class);
stopService(stopIntent);

ServiceTest.class

創立Service
public class ServiceTest extends Service {  
  
    @Override  
    public void onCreate() {  
        super.onCreate();  
        Log.d("tag", "ServiceTest onCreate()");  
    }  
  
    @Override  
    public int onStartCommand(Intent intent, int flags, int startId) {  
        Log.d("tag", "ServiceTest onStartCommand()");  
        return super.onStartCommand(intent, flags, startId);  
    }  
      
    @Override  
    public void onDestroy() {  
        super.onDestroy();  
        Log.d("tag", "ServiceTest onDestroy()");  
    }  
  
    @Override  
    public IBinder onBind(Intent intent) {  
        return null;  
    }  
  
}


並且在AndroidManifest.xml 新增Service
   <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name="ServiceTest"></service>
    </application>

基本上就可以看Log變化
基礎的Service就完成了

2014年11月10日 星期一

Arduino-Upload 後 avrdude: stk500_getsync(): not in sync: resp=0x00

最近在玩Arduino UNO
卻發生avrdude: stk500_getsync(): not in sync: resp=0x00



結果只是藍芽裝置必須先拔除,不然無法同步更新
說真的只因為好懶呀~!

Arduino-藍芽發送資料( 測試藍芽功能是否正常 )

#define BUFFERSIZE 127
int numLoop = 0; // number of times we looped

void setup() {
  Serial.begin(9600);

}
void loop() {

  Serial.println(numLoop);
  char str[20];
  sprintf(str,"\nanalogRead,%d@",50);
  Serial.write(str);
  delay(5000);
  numLoop++;
}