public class CallLogActivity implements SensorEventListener { SensorManager sensorManager; @Override public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.main); sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE); Cursor c = getContentResolver().query( android.provider.CallLog.Calls.CONTENT_URI, null, null, null, android.provider.CallLog.Calls.DATE+ " DESC"); startManagingCursor(c); ListAdapter adapter = new SimpleCursorAdapter(this, R.layout.calllog_row, c, new String[] { android.provider.CallLog.Calls.TYPE, android.provider.CallLog.Calls.NUMBER, android.provider.CallLog.Calls.CACHED_NAME }, new int[] { R.id.type, R.id.number, R.id.name }) { @Override public void setViewImage(ImageView v, String value){ switch (Integer.parseInt(value)){ case android.provider.CallLog.Calls.INCOMING_TYPE: v.setImageDrawable(getResources().getDrawable(android.R.drawable.sym_call_incoming)); break; case android.provider.CallLog.Calls.MISSED_TYPE: v.setImageDrawable(getResources().getDrawable(android.R.drawable.sym_call_missed)); break; case android.provider.CallLog.Calls.OUTGOING_TYPE: v.setImageDrawable(getResources().getDrawable(android.R.drawable.sym_call_outgoing)); break; default: break; } } }; setListAdapter(adapter); } // activity @Override protected void onResume(){ super.onResume(); sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELERAOMETER), SensorManager.SENSOR_DELAY_UI); } @Override protected void onStop(){ sensorManager.unregisterListener(this); super.onStop(); } @Override protected void onListItemClick(ListView l, View v, int position, long id){ telTo(((TextView) v.findViewById(R.id.number)).getText()); } public void onSensorChanged(SensorEvent event){ switch(event.sensor.getType()){ case Sencor.TYPE_ACCELEROMETER: if (getSelectedItemPosition() > -1){ if (Math.abs(event.values[0]) > SensorManager.GRAVITY_EARTH || Math.abs(event.values[1]) > SensorManager.GRAVITY_EARTH || Math.abs(event.values[2]) > SensorManager.GRAVITY_EARTH) { telTo(((TextView) getListView().getChildAt( getSelectedItemPosition()).findViewById(R.id.number)).getText()); } } default: } }
Month: June 2016
ARMプロセッサ
チップの設計には、基盤の部品を減らす、消費電力を抑えるなどの理由から、演算機能、グラフィックス機能、I/Oコントローラなどが1チップ化したSoCがよく採用されます。そして、ARMアーキテクチャは、そのSoCの一部として利用されています。
ARMアーキテクチャを設計しているARM社はファブレスメーカーです。
簡易sleepコマンド
#include < time.h > #include < stdio.h > #include < stdlib.h > int main(int argc, char **argv) { struct timespec req; char *end; if( argc != 2 || argv[1][0] == '\0' || (req.tv_sec = strtol(argv[1], &end, 10), *end != '\0') ) { fprintf(stderr, "Usage: %s seconds \n", argv[0]); return 1; } req.tv_nsec = 0; if (nanosleep(&req, NULL) < 0){ perror("naosleep"); return 1; } return 0; }
whoamiコマンド
getpwuid()を使います。
#include < unistd.h > #include < sys/types.h > #include < pwd.h > #include < stdio.h > int main(){ pid_t euid; struct passwd *pw; euid = geteuid(); if((pw = getpwuid(euid))== NULL){ printf("%d\n", (int)euid); } else { printf("%s\n", pw->pw_name); } return 0; }
簡易touchコマンド
#include < sys/types.h > #include < sys/stat.h > #include < fcntl.h > #include < utime.h > #include < stdio.h > int main(int argc, char **argv) { int i; int err = 0; if (argc <= 1){ fprintf(stderr, "Usage: %s file...\n", argv[0]); return 1; } for (i = 1; i < argc; i++){ open (argv[i], O_WRONLY|O_CREAT, 0666); if (utime(argv[i], NULL)){ perror(argv[i]); err = 1; } } return err; }
簡易rmコマンド
#include < unistd.h > #include < stdio.h > int main(int argc, char ** argv) { int i; int err = 0; if (argc <= 1){ fprintf(stderr, "Usage: %s file...\n", argv[0]); return 1; } for (i = 1; i < argc; i++){ if (unlink(argv[i]) < 0){ perror(argv[i]); err = 1; } } return err; }
簡易mkdirコマンド
#include < sys/types.h > #include < sys/stat.h > #include < stdio.h > int main(int argc, char **argv) { int i; int err = 0; if (argc <= 1){ fprintf(stderr, "Usage: %s file...\n", argv[0]); return 1; } for(i = 1; i < argc; i++){ if(mkdir(argv[i], 0777)<0){ perror(argv[i]); err = 1; } } return err; }
簡易lnコマンド
ln -s source destとln source destの形式に対応。
#include < unistd.h > #include < stdio.h > #include < string.h > int main(int argc, char **argv) { int s_flag; if ( argc <= 2 || argc >= 5 || (s_flag = (strcmp(argv[1], "-s")==0), argc == 3 && s_flag)|| (argc == 4 && !s_flag)) { fprintf(stderr, "Usage: %s [-s] source dest\n", argv[0]); return 1; } if (s_flag){ if (symlink(argv[2], argv[3]) < 0){ perror("symlink"); return 1; } } else { if (link(argv[1], argv[2])< 0){ perror("link"); return 1; } } return 0; }
簡易cp -pコマンド
コピー元のファイルのタイムスタンプ、ファイル所有者、ファイルモードをコピー先のファイルに設定。
#include < sys/types.h > #include < sys/stat.h > #include < fcntl.h > #include < unistd.h > #include < utime.h > #include < stdio.h > int main(int argc, char **argv) { int fd_r, fd_w; ssize_t n; int err = 0; struct stat s_buf; struct utimbuf u_buf; char buf[4096]; if (argc != 3){ fprintf(stderr, "Usage: %s source dest\n", argv[0]); return 1; } if ((fd_r = open(argv[1], O_RDONLY)) < 0){ perror(argv[1]); return 1; } if (fstat(fd_r, &s_buf) < 0){ perror(argv[1]); return 1; } if ((fd_w = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0){ perror(argv[2]); return 1; } while((n = read(fd_r, buf, sizeof buf)) > 0){ if (write(fd_w, buf, n)< 0){ perror(argv[2]); return 1; } } if (n < 0){ perror(argv[1]); return 1; } u_buf.actime = s_buf.st_atime; u_buf.modtime = s_buf.st_mtime; if (utime(argv[2], &u_buf)){ perror(argv[2]); err = 1; } fchown(fd_w, s_buf.st_uid, s_buf.st_gid); if (fchmod(fd_w, s_buf.st_mode)<0){ perror(argv[2]); err = 1; } return err; }
簡易cpコマンド
#include < sys/types.h > #include < sys/stat.h > #include < fcntl.h > #include < unistd.h > #include < stdio.h > int main (int argc, char ** argv) { int fd_r, fd_w; ssize_t n; char buf[4096]; if (argc != 3){ fprintf(stderr, "Usage: %s source dest\n", argv[0]); return 1; } if ((fd_r = open(argv[1], O_RDONLY)) < 0){ perror(argv[1]); return 1; } if ((fd_w = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC, 0666)) < 0){ perror(argv[2]); return 1; } while ((n = read(fd_r, buf, sizeof buf)) > 0){ if(write(fd_w,buf, n)< 0){ perror(argv[2]); return 1; } } if (n < 0){ perror(argv[1]); return 1; } return 0; }