2011年12月6日 星期二

android appwidget使用thread (更新)

 Clock_widget.java這個已經我改寫了,這才是我想要寫的thread ,不需要透過Handler,public static void start_service()這靜態方法讓thread直接呼叫來啟動service,

 thread中有3個靜態方法set_second(int s) ,stop_thread(),start_thread()讓使用者來設定顯示時間間隔,停止,開始時間,其實我這project已經多加了許多功能(譬如鬧鐘,顯示方
式..),但是還不是我想要的.

滿有趣的我用了一個反向寫程式方法來啟動音樂,在Clock_widget.java結尾的地方(藍色部份)

其他程式部份我會在放上來(待續)

終於知道寫法犯了錯誤,下面的 public void onReceive(Context context, Intent intent)會啟動public  Clock_widget()這個建構子,每當我按鈕,onReceive接收,就會呼叫public  Clock_widget()這個建構子,因此thread會在產生,一直按就會一直產生thread,解決方法public void onUpdate才是初始化的地方,將public  Clock_widget()拿掉,把內容放置onUpdate就OK了.

package test.Clock_widget1;


import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class CLOCK1_widget1_music_file {
    private static File myFilePath;
    private static List dirarray;
    private static String filepath;
    public CLOCK1_widget1_music_file(String path) {
  
    //必須初始化array,否則error
  
 
    }
    //給路徑,取得all file list,給目錄或回上一層使用
    public static List get_file_list(String path){
         myFilePath = new File(path);
         filepath=path;
  
        //必須初始化array,否則error
        dirarray=new ArrayList();
        //加上第一項
        dirarray.add("回到上一層");
      
  
      
         //是目錄回傳list
      
        if(myFilePath.isDirectory()){
         for(int j=0;j
             dirarray.add( myFilePath.list()[j]);
             //Log.d("TAG F:",dirarray[j]);
         }
  
               
      
        }else{
            //不是目錄回到上一層
            //先回到當前目錄
            filepath=myFilePath.getParent();
            File f=new File(filepath);
            //在一次就是上層目錄,但是若是根目錄除外
            if(!filepath.equals("/")){
            filepath=f.getParent();
            }
            myFilePath = new File(filepath );
          
          
            for(int j=0;j
                 dirarray.add( myFilePath.list()[j]);
                 //Log.d("TAG F:",dirarray[j]);
             }
          
        }
        return dirarray;
      
      
    }
    //當前路徑
    public static String get_file_path(){
      
        return filepath;
              
    }
    //選中file
    public static String get_file(int i){
      
        return dirarray.get(i);
              
    }
    public static boolean is_directory(String st){
        File myFilePath = new File(st);
        return myFilePath.isDirectory();
    }
    public static boolean is_file(String st){
        File myFilePath = new File(st);
        return myFilePath.isFile();
    }
  
}

沒有留言: