android代碼碎片(—)

一、SharedPreferences

定義

SharedPreferences preferences = getSharedPreferences("mySelectedApps", MODE_WORLD_READABLE);

使用

Editor editor = preferences.edit();

editor.putString(nameAndPackageString, labelString);//把包名和應用名存儲
editor.commit();

editor.remove(nameAndPackageString); //移除
editor.commit();

editor.clear(); //清空
editor.commit();


獲取已定義的SharedPreferences

SharedPreferences prefs = myContext.getSharedPreferences("mySelectedApps", Context.MODE_WORLD_READABLE);

使用

private Map<String, String> selectMap = new HashMap<String, String>();

selectMap = (Map<String, String>)prefs.getAll();//通過getAll()方法獲取對應的HashMap


二、HashMap的遍歷

法一:

Iterator iter = selectMap.entrySet().iterator();

while (iter.hasNext()){

Map.Entry entry = (Map.Entry) iter.next();

 item.nameAndPackage = (String) entry.getKey();

 item.label = (String) entry.getValue();
}

法二:

 for (Object o : tempMap.keySet()) {
 System.out.println("key=" + o + " value=" + tempMap.get(o));
  }

三、根據設置爲Main action的Activity來獲取系統所有應用


private PackageManager mPackageManager;

private List<ResolveInfo> mAllApps; //保存所有Apps的數據

private void bindAllApps() {

mPackageManager = getPackageManager();  

        Intent mainIntent = new Intent(Intent.ACTION_MAIN, null);  

        mainIntent.addCategory(Intent.CATEGORY_LAUNCHER);  

        mAllApps = mPackageManager.queryIntentActivities(mainIntent, 0);  

        Collections.sort(mAllApps, new ResolveInfo.DisplayNameComparator(mPackageManager)); 
}

獲取應用程序相關信息

ResolveInfo res = mAllApps.get(i);

item.name = res.activityInfo.name; //Activity的名稱

item.packageName= res.activityInfo.packageName; //包名

item.appIcon = res.loadIcon(mPackageManager); //圖標

item.label  = (String) res.loadLabel(mPackageManager);//應用名

由包名獲取應用的圖標

 ApplicationInfo applicationInfo = null;

try {

applicationInfo = pm.getApplicationInfo(item.packageName, PackageManager.GET_META_DATA);

} catch (NameNotFoundException e) {
e.printStackTrace();
}
if(applicationInfo != null)
item.appIcon =  pm.getApplicationIcon(applicationInfo);

ps:一個app裏面有可能有幾個Main屬性的Activity,就像撥號與聯繫人,它們圖標和名稱都不一樣,但其實是屬於一個app,他們包名一樣,如果我們用讀取main的方法來讀取所有的app,那麼就可以讀取出多個。這多個其實是一個app,它們的AndroidManifest.xml不同,作爲了不同的入口。

四、進入應用程序的方式

普通調用另一個Activity

Intent intent = new Intent(MainActivity.this, Game.class);

startActivity(intent);


包名+Activity名的方式調用

ComponentName componentName = new ComponentName(i.packageName, i.name); 

 Intent ii = new Intent();

ii.setComponent(componentName);

startActivity(ii);


單由包名調用

Intent ii = getPackageManager().getLaunchIntentForPackage(i.packageName);

 startActivity(ii); 

五、安裝、卸載、更新應用程序的廣播

註冊廣播
IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);

filter.addAction(Intent.ACTION_PACKAGE_REMOVED);

filter.addAction(Intent.ACTION_PACKAGE_CHANGED);

filter.addDataScheme("package");

registerReceiver(myAppReceiver, filter);


定義廣播

public class AppInstallReceiver extends BroadcastReceiver {

   public void onReceive(Context context, Intent intent) {
       PackageManager manager = context.getPackageManager();
       String PkgName = intent.getData().getSchemeSpecificPart();;
       if (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED)) {
           Toast.makeText(context, "安裝成功"+PkgName, Toast.LENGTH_LONG).show();
       }
       else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REMOVED)) {
           Toast.makeText(context, "卸載成功"+ PkgName, Toast.LENGTH_LONG).show();
       }
       else if (intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED)) {
           Toast.makeText(context, "替換成功"+PkgName, Toast.LENGTH_LONG).show();
       }
   }
}

註銷廣播在onDestroy()中

unregisterReceiver(myAppReceiver);

六、設置單獨顯示時間的線程

private Handler mHandler;

Boolean stopThread=false;

oncreate方法
 HandlerThread thread = new HandlerThread("MyHandlerThread"); 
 thread.start();//創建一個HandlerThread並啓動它
//使用HandlerThread的looper對象創建Handler,如果使用默認的構造方法,很有可能阻塞UI線程  
mHandler = new Handler(thread.getLooper());

 //顯示時間的線程
    Runnable mBackgroundRunnable = new Runnable() {
public void run() {
while(!stopThread){
           handler.sendMessage(new Message());
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();

}

    };

private Handler handler = new Handler() {
        public void handleMessage(Message msg) {
        //大寫的HH是24小時制,小寫是12小時制
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");      
String date = sDateFormat.format(new java.util.Date());
dateTime.setText(date);
        }  
    }; 

protected void onResume() {
        stopThread=false;
        mHandler.post(mBackgroundRunnable);//將線程post到Handler中 
    super.onResume();
 }

七、usb監聽廣播

private File usbPath_rockchip = new File("/mnt/usb_storage/USB_DISK0");
private File usbPath_amlogic = new File("/storage/external_storage/sda1");

//註冊usb監聽廣播
        IntentFilter iFilter = new IntentFilter();
        iFilter.addAction(Intent.ACTION_MEDIA_EJECT);
        iFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
        iFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
        iFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
        iFilter.addDataScheme("file");
        usbReceiver = new USBBroadCastReceiver();
        registerReceiver(usbReceiver, iFilter);
//第一次的檢測
try {
if(getUSB(usbPath_rockchip) || getUSB(usbPath_amlogic))
usbButton.setSelected(true);
} catch (Exception e) {
}

private boolean getUSB(File path) {
boolean isUsb = false;
if (path.isDirectory()) {
try {
File[] files = path.listFiles();


if (files.length > 0)
isUsb = true;
else {
isUsb = false;
}
} catch (Exception e) {
return false;
}
}
return isUsb;
}
        
//判斷是否有usb存儲設備的廣播
private class USBBroadCastReceiver extends BroadcastReceiver {
    public void onReceive(Context context, Intent intent) {
    String action = intent.getAction();
    if (action.equals(Intent.ACTION_MEDIA_MOUNTED)){
    Toast.makeText(context, "USB連接", Toast.LENGTH_LONG).show();
    usbButton.setSelected(true);
    }
    else{
    usbButton.setSelected(false);
    }
     
    }
}

八、有線網絡和無線網絡的檢測

private int firsWebtFlage = 0;//是否第一次檢測網絡狀況
private int firstWifiFlage = 0;

//註冊網絡廣播
        IntentFilter iFilter2 = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        iFilter2.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
        netReceiver = new ConnectionChangeReceiver();
        registerReceiver(netReceiver, iFilter2);    

//判斷網絡的廣播
public class ConnectionChangeReceiver extends BroadcastReceiver {   

        public void onReceive( Context context, Intent intent ) {   

            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);   

            NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET);   

            NetworkInfo mWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);   

            Log.v("檢測網絡", " ");

            //判斷是否連上有線網絡

            if (activeNetInfo != null && activeNetInfo.isConnected()){

            if(firsWebtFlage != 0 && intent.getAction().equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))

            Toast.makeText(context, "連上有線網絡" + firsWebtFlage, Toast.LENGTH_LONG).show();

            else

            firsWebtFlage++;

    webButton.setSelected(true);

            }

            else

            webButton.setSelected(false);

          //判斷是否連上WiFi

            if( mWifi != null && mWifi.isConnected()){

            if(firstWifiFlage != 0 && intent.getAction().equals(WifiManager.WIFI_STATE_CHANGED_ACTION))

            Toast.makeText(context, "連上WiFi" + firsWebtFlage, Toast.LENGTH_LONG).show();

            else

            firstWifiFlage++;

    wifiButton.setSelected(true);

            }

            else

    wifiButton.setSelected(false); 

      }   

   }

九、AlertDialog的使用

private void openNewGameDialog() {
new AlertDialog.Builder(this)
.setTitle(R.string.new_game_title)
.setItems(R.array.difficulty, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
startGame(which);
}
}).show();
}
values文件下的arrays.xml
<?xml version="1.0" encoding="utf-8"?>

<resources>

    <array name="difficulty">

        <item>@string/easy_label</item>

        <item>@string/medium_label</item>

        <item>@string/hard_label</item>

    </array>

</resources>

十、獲取窗口大小

Display display = getWindow().getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics();
display.getMetrics(outMetrics);
mSreenWidth = outMetrics.widthPixels ;

十一、手勢

private GestureDetector dector;
oncreate()中:
dector = new GestureDetector(this, this);
實現OnGestureListener諸多方法,其中
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
Log.v("onFling", " ");
if(e1.getX() - e2.getX() > 70){
next();
return true;
}
else if(e2.getX() - e1.getX() > 70 ){
prev();
return true;
}
return false;
}
public boolean onTouchEvent(MotionEvent event){
Log.v("onFling", " ");
return dector.onTouchEvent(event);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章