Android studio 2.0 preview


Android studio vừa (23/11/2015) cho tải về bản dùng thử với một số tính năng cải tiến

  • Cải tiến tốc độ biên dịch và triển khai ứng dụng cho các thiết bị giả lập

image03

  • Bổ sung thêm thanh điều khiển chạy và dừng ứng dụng

image05

  • Tích hợp tính năng GPU Profiler

image01

nguồn http://android-developers.blogspot.ca/2015/11/android-studio-20-preview.html

 

Advertisements

Android – List and kill background process


Android OS is a multitasking operating, there are a lot of running background process, these process make your device will be slower. Android SDK provides set of API allow developer can list all background process and kill (stop) them.
In this post, we will discussing about how listing and kill background process in Android device.

List all android background processes
List all android background processes

We need two permission are KILL_BACKGROUND_PROCESSES and to GET_TASKS.
Declare two permission as

<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <uses-permission android:name="android.permission.GET_TASKS" />

Declare 2 variable

List<ActivityManager.RunningAppProcessInfo> processes;
ActivityManager amg;

Register service with Android get all running processes

// using Activity service to list all process
amg = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
// list all running process
processes = amg.getRunningAppProcesses();

Create MyAdapter class extend BaseAdapter class to populate process’s information on ListView as

public class MyAdapter extends BaseAdapter {

    List<ActivityManager.RunningAppProcessInfo> processes;
    Context context;

    public MyAdapter(List<ActivityManager.RunningAppProcessInfo> processes, Context context) {
        this.context = context;
        this.processes = processes;
    }

    @Override
    public int getCount() {
        return processes.size();
    }

    @Override
    public Object getItem(int position) {
        return processes.get(position);
    }

    @Override
    public long getItemId(int position) {
        return processes.get(position).pid;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        Process pro;

        if(convertView == null)
        {
            convertView = new TextView(context);
            pro = new Process();
            pro.name = (TextView)convertView;

            convertView.setTag(pro);
        }else
        {
            pro = (Process)convertView.getTag();
        }

        pro.name.setText(processes.get(position).processName);

        return convertView;
    }

    class Process
    {
        public TextView name;
    }
}

Display list of process on listview, display name only (just demo).

adp = new MyAdapter(processes, MainActivity.this);
lst.setAdapter(adp);

When user longclick on process name, this process will be kill

lst.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
    @Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        if (load == 1) {
            for (ActivityManager.RunningAppProcessInfo info : processes) {
                if (info.processName.equalsIgnoreCase(
                        ((ActivityManager.RunningAppProcessInfo)parent.getItemAtPosition(position)).processName)) {
                    // kill selected process
                    android.os.Process.killProcess(info.pid);
                    android.os.Process.sendSignal(info.pid, android.os.Process.SIGNAL_KILL);
                    amg.killBackgroundProcesses(info.processName);
                }
            }
            load = 0;
            // refresh list of process
            skill_Load_Process();
        }
        return true;
    }
});

You only kill user process, with system process you need a rooted device.

Ok, download sourcecode Here

Direct access to SQL Server From Android


Sử dụng thư viện JTDS –> http://sourceforge.net/projects/jtds/  để truy cập SQL Server từ Android

Download thư viện từ đây

Kết nối với SQL Server như sau:

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Class.forName("net.sourceforge.jtds.jdbc.Driver").newInstance();
conn = DriverManager
		.getConnection(""
				+ "jdbc:jtds:sqlserver://172.16.160.81/northwind;instance=SQL2008;"
				+ "user=sa;password=sa;");

net.sourceforge.jtds.jdbc.Driver là dạng Drive truy cập SQL Server.

Thêm dữ liệu

comm = conn.prepareStatement("insert into Employees("
		+ "firstname, lastname) values(?,?)");
comm.setString(1, etFirst.getText().toString());
comm.setString(2, etLast.getText().toString());					
comm.executeUpdate();

Đọc dữ liệu

comm = conn.createStatement();
ResultSet rs = comm.executeQuery("Select EmployeeID, Firstname From Employees");
String msg = "";
while (rs.next()) {
	msg += "\nID: " + rs.getInt("EmployeeID") + " Name: "
			+ rs.getString("Firstname");

Giao diện

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="${relativePackage}.${activityClass}" >

    <EditText
        android:id="@+id/etFirstName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="4dp"
        android:background="#eeeeee"
        android:hint="Firstname"
        android:textColor="#000000"
        android:textSize="24dp" >

        <requestFocus />
    </EditText>

    <EditText
        android:id="@+id/etLastName"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#eeeeee"
        android:hint="Lastname"
        android:padding="4dp"
        android:textColor="#000000"
        android:textSize="24dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="4dp" >

        <Button
            android:id="@+id/btnConnect"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Connect" />

        <Button
            android:id="@+id/btnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             android:layout_weight="1"
            android:text="Add new" />
    </LinearLayout>

    <TextView
        android:id="@+id/tvDs"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ffffff"
        android:padding="8dp"
        android:text=""
        android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>

Mã nguồn tham khảo https://drive.google.com/file/d/0B2F9IAasWwaNYVZSc2tiZDNlNTA/view?usp=sharing

Xác định mật độ điểm ảnh trên Android


Đoạn code sau giúp chúng ta xác định mật độ điểm ảnh và qui đổi sang đơn vị đo px (tương đương 50DP)

Tỉ lệ mật độ điểm ảnh

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch (metrics.densityDpi) {
	case DisplayMetrics.DENSITY_LOW:
		pxSize = 38;
		break;
	case DisplayMetrics.DENSITY_MEDIUM:
		pxSize = 50;
		break;
	case DisplayMetrics.DENSITY_HIGH:
		pxSize = 75;
		break;
	case DisplayMetrics.DENSITY_XHIGH:
		pxSize = 100;
		break;
	case DisplayMetrics.DENSITY_XXHIGH:
		pxSize = 150;
		break;
	case DisplayMetrics.DENSITY_XXXHIGH:
		pxSize = 200;
		break;
}

Với sự hỗ trợ của thư viện này chúng ta xác định được tỉ lệ giữa độ đo DP và PX khá đơn giản.