2017年3月31日金曜日

Android 卡拉OK

Android 卡拉OK


protected void arp() {
        int sampleRateInHz = 44100;
        int rec_bufsize = AudioRecord.getMinBufferSize(sampleRateInHz, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
        int play_bufsize = AudioTrack.getMinBufferSize(sampleRateInHz, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
//        MediaRecorder.AudioSource.MIC
        AudioRecord audioRecord = new AudioRecord(
                MediaRecorder.AudioSource.MIC,
                sampleRateInHz,
                AudioFormat.CHANNEL_IN_MONO,
                AudioFormat.ENCODING_PCM_16BIT,
                rec_bufsize);
        AudioTrack audioTrack = new AudioTrack(
                AudioManager.STREAM_MUSIC,
                sampleRateInHz,
                AudioFormat.CHANNEL_OUT_MONO,
                AudioFormat.ENCODING_PCM_16BIT,
                play_bufsize,
                AudioTrack.MODE_STREAM);
        byte[] temp = new byte[16];
        audioRecord.startRecording();
        audioTrack.play();
        while (!stop) {
            audioRecord.read(temp, 0, temp.length);
            audioTrack.write(temp, 0, temp.length);
        }
        audioTrack.stop();
        audioRecord.stop();
        audioRecord.release();
    }



2017年3月30日木曜日

Android AoundTrack

Android AoundTrack


package com.example.kankanla.start;

import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toast.makeText(this, "AudioTrack.demo", Toast.LENGTH_LONG).show();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    AP();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }

    protected void AP() throws IOException {
        int sampleRateInHz = 44100;
        int buferSize = AudioTrack.getMinBufferSize(
                sampleRateInHz,
                AudioFormat.CHANNEL_IN_STEREO,
                AudioFormat.ENCODING_PCM_16BIT);
        AudioTrack audioTrack = new AudioTrack(
                AudioManager.STREAM_MUSIC,
                sampleRateInHz,
                AudioFormat.CHANNEL_IN_STEREO,
                AudioFormat.ENCODING_PCM_16BIT,
                buferSize, AudioTrack.MODE_STREAM);

        FileInputStream fileInputStream = new FileInputStream(new File(Environment.getExternalStorageDirectory().toString(), "PCM-D50_441kHz16bit.wav"));
        byte[] buffer = new byte[buferSize];
        int lens = 0;
        audioTrack.play();
        while ((lens = fileInputStream.read(buffer)) != -1) {
            audioTrack.write(buffer, 0, lens);
        }
        System.out.println(audioTrack.getPlayState());
        audioTrack.stop();
        System.out.println(audioTrack.getPlayState());
        System.out.println(Thread.currentThread().getName());

//        public static final int PLAYSTATE_STOPPED = 1;  // matches SL_PLAYSTATE_STOPPED
//        /** indicates AudioTrack state is paused */
//        public static final int PLAYSTATE_PAUSED  = 2;  // matches SL_PLAYSTATE_PAUSED
//        /** indicates AudioTrack state is playing */
//        public static final int PLAYSTATE_PLAYING = 3;  // matches SL_PLAYSTATE_PLAYING
    }
}

2017年3月26日日曜日

Android ContentProvider 内容提供程序單元測試

ContentProvider 内容提供程序單元測試

public class youContentProviderTest {
    @Test
    public void delete() throws Exception {
        Context context = InstrumentationRegistry.getContext();
        ContentResolver contentResolver = context.getContentResolver();
        Uri uri = Uri.parse("content://com.kankanla.e560.m0325a.youContentProvider/categoly/delete/");
        int i = contentResolver.delete(uri, "rowid > ?", new String[]{"10"});
        System.out.println("77777777777777777777777777777777");
        System.out.println(i);
    }

    @Test
    public void insert() throws Exception {
        Context context = InstrumentationRegistry.getContext();
        ContentResolver contentResolver = context.getContentResolver();
        Uri uri = Uri.parse("content://com.kankanla.e560.m0325a.youContentProvider/category/insert/1");
        System.out.println("11111111111111111111111111111111111111111");
        System.out.println(uri.getAuthority());
        System.out.println(uri.getPath());
        System.out.println(uri.getPathSegments());
        System.out.println("2222222222222222222222222222222222222222222");
        ContentValues contentValues = new ContentValues();
        contentValues.put("category_name", "日本語");
        for (int i = 0; i < 10; i++) {
            Uri uri1 = contentResolver.insert(uri, contentValues);
            System.out.println(uri1.toString());
        }
    }

}




package com.kankanla.e560.m0325a;

import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.provider.Settings;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.util.Log;

/**
 * Created by E560 on 2017/03/25.
 */

public class youContentProvider extends ContentProvider {
    private static final String TAG = "youContentProvider";
    private static YouDB youDB;
    private static UriMatcher uriMatcher;
    private static final String AUTHORITY = "com.kankanla.e560.m0325a.youContentProvider";

    private static final int insert_category = 1;
    private static final int select_category = 2;
    private static final int insert_list = 3;
    private static final int select_list = 4;
    private static final int matcher_all = 5;
    private static final int del_category = 6;
    private static final int error = 9;

    static {
        uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
        uriMatcher.addURI(AUTHORITY, "list/insert", insert_list);
        uriMatcher.addURI(AUTHORITY, "category/insert", insert_category);
        uriMatcher.addURI(AUTHORITY, "category/insert/#", insert_category);
        uriMatcher.addURI(AUTHORITY, "category/delete/", del_category);
        uriMatcher.addURI(AUTHORITY, "*/*/*", error);
    }

    @Override
    public boolean onCreate() {
        youDB = new YouDB(getContext());
        SQLiteDatabase sqLiteDatabase = youDB.getReadableDatabase();
        sqLiteDatabase.isReadOnly();
        System.out.println("888888888888888888888888888888888888888888");
        Log.i(TAG, String.valueOf(sqLiteDatabase.isOpen()));
        return sqLiteDatabase.isOpen();
    }

    @Nullable
    @Override
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        return null;
    }

    @Nullable
    @Override
    public String getType(@NonNull Uri uri) {
        return null;
    }

    @Nullable
    @Override
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        Uri uri1 = Uri.parse(uri.getAuthority() + uri.getPath());
        int i = uriMatcher.match(uri);
        System.out.println(i);
        long cont = 0;
        System.out.println("000000000000000000000000000000000000000000000000");
        SQLiteDatabase sqLiteDatabase = youDB.getWritableDatabase();
        switch (i) {
            case insert_category:
                cont = sqLiteDatabase.insert("category", null, values);
                uri1 = ContentUris.withAppendedId(Uri.parse(uri.getAuthority() + uri.getPath()), cont);
                break;
            case insert_list:
                cont = sqLiteDatabase.insert("list", null, values);
                uri1 = ContentUris.withAppendedId(Uri.parse(uri.getAuthority() + uri.getPath()), cont);
                break;
        }
        System.out.println(uri1.toString());
        sqLiteDatabase.close();
        return uri1;
    }

    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        int flag = uriMatcher.match(uri);
        int con = 0;
        SQLiteDatabase sqLiteDatabase = youDB.getWritableDatabase();
        switch (flag) {
            case del_category:
                con = sqLiteDatabase.delete("category", selection, selectionArgs);
                break;
        }
        sqLiteDatabase.close();
        return con;
    }

    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
        return 0;
    }

    private class YouDB extends SQLiteOpenHelper {
        private static final String name = "m0325.db";
        private static final int version = 1;

        public YouDB(Context context) {
            super(context, name, null, version);
        }

        @Override
        public void onCreate(SQLiteDatabase db) {
            String sql_category = "create table category(rowid INTEGER PRIMARY KEY AUTOINCREMENT, category_name TEXT NOT NULL)";
            String sql_index = "create table list (rowid INTEGER PRIMARY KEY AUTOINCREMENT, category_id INTEGER NOT NULL,comment TEXT)";
            db.execSQL(sql_category);
            db.execSQL(sql_index);
        }

        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

        }
    }

}





2017年3月19日日曜日

android adb error (10061)

解決步驟

C:\Users>adb devices
List of devices attached
cc13094de        device

C:\Users>adb connect 192.168.11.100
unable to connect to 192.168.11.100:5555: cannot connect to 192.168.11.100:5555: 対象のコンピューターによって拒否された ため、接続できませんでした。 (10061)

C:\Users>adb kill-server

C:\Users>adb usb
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
restarting in USB mode

C:\Users>adb tcpip 5555
restarting in TCP mode port: 5555

C:\Users>adb connect 192.168.11.100
connected to 192.168.11.100:5555

C:\Users>adb devices
List of devices attached
192.168.11.100:5555     device
cc13094de        device

2017年3月17日金曜日

Andriod Intent Camera

Andriod Intent Camera



public class MainActivity extends AppCompatActivity {
    protected File file;
    protected Uri uri;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        t1();
    }

    protected void t1() {
        file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "00000aaaa.jpg");
        uri = Uri.fromFile(file);
        Intent intent = new Intent();
        intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        startActivityForResult(intent, 99);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 99 && resultCode == RESULT_OK) {
            view2();
        }
    }

    protected void view2() {
        Display display = getWindowManager().getDefaultDisplay();
        Point p = new Point();
        display.getSize(p);

        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(file.getAbsolutePath(), options);

        int samsize = Math.max(options.outHeight / p.y, options.outWidth / p.x);
        options.inJustDecodeBounds = false;
        options.inSampleSize = samsize;

        ImageView imageView = (ImageView) findViewById(R.id.vvvv);
        Bitmap bt = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
        imageView.setImageBitmap(bt);
    }
}

2017年3月13日月曜日

2017年3月12日日曜日

intent Camera

intent Camera



    protected void t1() {
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, 1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        ImageView imageView = (ImageView) findViewById(R.id.imageView);
        Bundle bu = data.getExtras();
        Bitmap bt = (Bitmap) bu.get("data");
        imageView.setImageBitmap(bt);
    }


https://developer.android.com/training/camera/photobasics.html

static final int REQUEST_IMAGE_CAPTURE = 1;

private void dispatchTakePictureIntent() {
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
    }
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
        Bundle extras = data.getExtras();
        Bitmap imageBitmap = (Bitmap) extras.get("data");
        mImageView.setImageBitmap(imageBitmap);
    }
}






2017年3月6日月曜日

Android 的第一款軟體誕生

Android 的第一款軟體誕生。利用了Flickr提供的圖片查詢API按照名稱
查詢圖片,並顯示在手機上。

2016年5月開始接觸JAVA, 本軟體是邊學邊用的結果。

下一款軟體爭取能夠公開在GooglePlay上。






下載地址
app-free-release.apk
https://www.asuswebstorage.com/navigate/s/181301E935CB4FD480EB2D54B763A9A9Y