网络安全配置
https://developer.android.com/training/articles/security-config
NetworkSecurityConfig: No Network Security Config specified, using platform default
res/xml/network_security_config.xml
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">ekidata.jp</domain>
</domain-config>
</network-security-config>
<?xml version="1.0" encoding="utf-8"?>
<manifest ... >
<application android:networkSecurityConfig="@xml/network_security_config"
... >
...
</application>
</manifest>
2019年10月8日火曜日
2019年9月1日日曜日
android 音声の周波数を作成
android 音声の周波数を作成
byte b = (byte)(Math.sin(bufferIndex/2*Math.PI(SamplingRate /Frequency))
角度 =bufferIndex /2*Math.PI(4400/800);
byte値(音声のビット、B辺) = (byte) (Math.sin(temp) * 120(C辺);
private void hz() {
byte[] bs = new byte[44100];
Double temp;
for (int i = 0; i < bs.length; i++) {
temp = i / 2 * Math.PI / (44100 / Double.parseDouble("800"));
bs[i] = (byte) (Math.sin(temp) * 120);
}
audioTrack.play();
while (true) {
audioTrack.write(bs, 0, bs.length);
}
}
byte b = (byte)(Math.sin(bufferIndex/2*Math.PI(SamplingRate /Frequency))
角度 =bufferIndex /2*Math.PI(4400/800);
byte値(音声のビット、B辺) = (byte) (Math.sin(temp) * 120(C辺);
private void hz() {
byte[] bs = new byte[44100];
Double temp;
for (int i = 0; i < bs.length; i++) {
temp = i / 2 * Math.PI / (44100 / Double.parseDouble("800"));
bs[i] = (byte) (Math.sin(temp) * 120);
}
audioTrack.play();
while (true) {
audioTrack.write(bs, 0, bs.length);
}
}
private void hz() { byte[] bs = new byte[44100]; Double temp; for (int i = 0; i < bs.length; i++) { temp = i / 2 * Math.PI / (44100 / Double.parseDouble("800")); bs[i] = (byte) (Math.sin(temp) * 120); } audioTrack.play(); while (true) { audioTrack.write(bs, 0, bs.length); } }
2019年7月11日木曜日
Understand the Activity Lifecycle 生命周期
生命周期
package com.kankanla.m20190711m_recorder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private final String T = "### MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i(T, "1 onCreate");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
Log.i(T, "2 onStart");
super.onStart();
}
@Override
protected void onResume() {
Log.i(T, "3 onResume");
super.onResume();
}
@Override
protected void onPostResume() {
Log.i(T, "4 onPostResume");
super.onPostResume();
}
@Override
protected void onPause() {
Log.i(T, "5 onPause");
super.onPause();
}
@Override
protected void onStop() {
Log.i(T, "6 onStop");
super.onStop();
}
@Override
protected void onDestroy() {
Log.i(T, "7 onDestroy");
super.onDestroy();
}
@Override
protected void onRestart() {
Log.i(T, "8 onRestart");
super.onRestart();
}
}
2018年10月28日日曜日
3.5 毫米耳机:配件规范
3.5 毫米耳机:配件规范
https://source.android.com/devices/accessories/headset/plug-headset-spec
https://source.android.com/devices/accessories/headset/plug-headset-spec
直接启动
直接启动
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
https://developer.android.com/training/articles/direct-boot?hl=zh-cn
<action android:name="android.intent.action.LOCKED_BOOT_COMPLETED" />
https://developer.android.com/training/articles/direct-boot?hl=zh-cn
2018年9月12日水曜日
【Android】快速切换到主线程更新UI的几种方法
【Android】快速切换到主线程更新UI的几种方法
方法一: view.post(Runnable action)
textView.post(new Runnable() {
@Override
public void run() {
textView.setText("更新textView");
//还可以更新其他的控件
imageView.setBackgroundResource(R.drawable.update);
}
});
方法二: activity.runOnUiThread(Runnable action)
public void updateUI(final Context context) {
((MainActivity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
//此时已在主线程中,可以更新UI了
}
});
}
方法三: Handler机制
...
方法一: view.post(Runnable action)
textView.post(new Runnable() {
@Override
public void run() {
textView.setText("更新textView");
//还可以更新其他的控件
imageView.setBackgroundResource(R.drawable.update);
}
});
方法二: activity.runOnUiThread(Runnable action)
public void updateUI(final Context context) {
((MainActivity) context).runOnUiThread(new Runnable() {
@Override
public void run() {
//此时已在主线程中,可以更新UI了
}
});
}
方法三: Handler机制
...
2018年7月19日木曜日
Android Handler Thread HandlerThread
Android Handler Thread HandlerThread
Handler.Callback callback = new Handler.Callback()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
button = findViewById(R.id.button);
CC();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
handler.sendEmptyMessage(99);
}
});
}
protected void CC() {
HandlerThread handlerThread = new HandlerThread("test");
handlerThread.start();
Handler.Callback callback = new Handler.Callback() {
@Override
public boolean handleMessage(Message message) {
System.out.println();
System.out.println(Thread.currentThread().getName());
System.out.println("0000000000000000000000000000000000000");
return false;
}
};
handler = new Handler(handlerThread.getLooper(), callback);
}
Handler.Callback callback = new Handler.Callback()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView = findViewById(R.id.textView);
button = findViewById(R.id.button);
CC();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
handler.sendEmptyMessage(99);
}
});
}
protected void CC() {
HandlerThread handlerThread = new HandlerThread("test");
handlerThread.start();
Handler.Callback callback = new Handler.Callback() {
@Override
public boolean handleMessage(Message message) {
System.out.println();
System.out.println(Thread.currentThread().getName());
System.out.println("0000000000000000000000000000000000000");
return false;
}
};
handler = new Handler(handlerThread.getLooper(), callback);
}
Android Handler Thread HandlerThread
Android Handler Thread HandlerThread
從主線程發送消息到子線程。
子線程必須創建Looper,
handlerThread.getLooper(),
Looper.prepare(),Looper.loop()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button2);
Tthread tthread = new Tthread();
tthread.start();
T3();
T4();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hh.sendEmptyMessage(12);
handler.sendEmptyMessage(12);
handlerT4.sendEmptyMessage(12);
}
});
}
protected void T3() {
HandlerThread handlerThread = new HandlerThread("name-thread");
handlerThread.start();
handler = new Handler(handlerThread.getLooper()) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
System.out.println(Thread.currentThread().getName());
System.out.println("T33333333333333333");
}
};
}
protected void T4() {
Thread thread = new Thread() {
@Override
public void run() {
super.run();
Looper.prepare();
handlerT4 = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
System.out.println("T44444444444444444444");
}
};
Looper.loop();
}
};
thread.start();
}
class Tthread extends Thread {
@Override
public void run() {
super.run();
Looper.prepare();
hh = new HH();
Looper.loop();
}
}
class HH extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
System.out.println("HHHHHHHHHHHHHHHHHHHHHHHH");
System.out.println(Thread.currentThread().getName());
}
}
從主線程發送消息到子線程。
子線程必須創建Looper,
handlerThread.getLooper(),
Looper.prepare(),Looper.loop()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = findViewById(R.id.button2);
Tthread tthread = new Tthread();
tthread.start();
T3();
T4();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
hh.sendEmptyMessage(12);
handler.sendEmptyMessage(12);
handlerT4.sendEmptyMessage(12);
}
});
}
protected void T3() {
HandlerThread handlerThread = new HandlerThread("name-thread");
handlerThread.start();
handler = new Handler(handlerThread.getLooper()) {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
System.out.println(Thread.currentThread().getName());
System.out.println("T33333333333333333");
}
};
}
protected void T4() {
Thread thread = new Thread() {
@Override
public void run() {
super.run();
Looper.prepare();
handlerT4 = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
System.out.println("T44444444444444444444");
}
};
Looper.loop();
}
};
thread.start();
}
class Tthread extends Thread {
@Override
public void run() {
super.run();
Looper.prepare();
hh = new HH();
Looper.loop();
}
}
class HH extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
System.out.println("HHHHHHHHHHHHHHHHHHHHHHHH");
System.out.println(Thread.currentThread().getName());
}
}
2018年7月15日日曜日
StreamConfigurationMap
StreamConfigurationMap
CameraManager cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics("0");
StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] a = streamConfigurationMap.getOutputSizes(MediaRecorder.class);
Size[] b = streamConfigurationMap.getOutputSizes(SurfaceHolder.class);
System.out.println(streamConfigurationMap);
07-15 01:25:52.463 7881-7881/? I/System.out:
CameraManager cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
CameraCharacteristics cameraCharacteristics = cameraManager.getCameraCharacteristics("0");
StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
Size[] a = streamConfigurationMap.getOutputSizes(MediaRecorder.class);
Size[] b = streamConfigurationMap.getOutputSizes(SurfaceHolder.class);
System.out.println(streamConfigurationMap);
07-15 01:25:52.463 7881-7881/? I/System.out:
StreamConfiguration(Outputs(
[w:4096, h:3072, format:JPEG(256), min_duration:0, stall:1093386752],
[w:4096, h:2304, format:JPEG(256), min_duration:0, stall:870040064],
[w:3648, h:2736, format:JPEG(256), min_duration:0, stall:908645888],
[w:3648, h:2052, format:JPEG(256), min_duration:0, stall:731484416],
[w:3264, h:2448, format:JPEG(256), min_duration:0, stall:767309312],
[w:3264, h:1836, format:JPEG(256), min_duration:0, stall:625481984],
[w:2592, h:1944, format:JPEG(256), min_duration:0, stall:557758208],
[w:2592, h:1458, format:JPEG(256), min_duration:0, stall:468318656],
[w:2080, h:1560, format:JPEG(256), min_duration:0, stall:430380800],
[w:2080, h:1170, format:JPEG(256), min_duration:0, stall:372785600],
[w:2048, h:1536, format:JPEG(256), min_duration:0, stall:423346688],
[w:1920, h:1080, format:JPEG(256), min_duration:0, stall:347225600],
[w:1600, h:1200, format:JPEG(256), min_duration:0, stall:336320000],
[w:1600, h:900, format:JPEG(256), min_duration:0, stall:302240000],
[w:1280, h:720, format:JPEG(256), min_duration:0, stall:265433600],
[w:800, h:600, format:JPEG(256), min_duration:0, stall:234080000],
[w:720, h:480, format:JPEG(256), min_duration:0, stall:224537600],
[w:640, h:480, format:JPEG(256), min_duration:0, stall:221811200],
[w:352, h:288, format:JPEG(256), min_duration:0, stall:207197696],
[w:320, h:240, format:JPEG(256), min_duration:0, stall:205452800],
[w:176, h:144, format:JPEG(256), min_duration:0, stall:201799424],
[w:1920, h:1080, format:PRIVATE(34), min_duration:0, stall:0],
[w:1280, h:960, format:PRIVATE(34), min_duration:0, stall:0],
[w:1280, h:720, format:PRIVATE(34), min_duration:0, stall:0],
[w:800, h:600, format:PRIVATE(34), min_duration:0, stall:0],
[w:720, h:480, format:PRIVATE(34), min_duration:0, stall:0],
[w:640, h:480, format:PRIVATE(34), min_duration:0, stall:0],
[w:352, h:288, format:PRIVATE(34), min_duration:0, stall:0],
[w:320, h:240, format:PRIVATE(34), min_duration:0, stall:0],
[w:176, h:144, format:PRIVATE(34), min_duration:0, stall:0],
[w:1920, h:1080, format:YUV_420_888(35), min_duration:0, stall:0],
[w:1280, h:960, format:YUV_420_888(35), min_duration:0, stall:0],
[w:1280, h:720, format:YUV_420_888(35), min_duration:0, stall:0],
[w:800, h:600, format:YUV_420_888(35), min_duration:0, stall:0],
[w:720, h:480, format:YUV_420_888(35), min_duration:0, stall:0],
[w:640, h:480, format:YUV_420_888(35), min_duration:0, stall:0],
[w:352, h:288, format:YUV_420_888(35), min_duration:0, stall:0],
[w:320, h:240, format:YUV_420_888(35), min_duration:0, stall:0],
[w:176, h:144, format:YUV_420_888(35), min_duration:0, stall:0],
[w:1920, h:1080, format:YV12(842094169), min_duration:0, stall:0],
[w:1280, h:960, format:YV12(842094169), min_duration:0, stall:0],
[w:1280, h:720, format:YV12(842094169), min_duration:0, stall:0],
[w:800, h:600, format:YV12(842094169), min_duration:0, stall:0],
[w:720, h:480, format:YV12(842094169), min_duration:0, stall:0],
[w:640, h:480, format:YV12(842094169), min_duration:0, stall:0],
[w:352, h:288, format:YV12(842094169), min_duration:0, stall:0],
[w:320, h:240, format:YV12(842094169), min_duration:0, stall:0],
[w:176, h:144, format:YV12(842094169), min_duration:0, stall:0]),
HighResolutionOutputs(),
Inputs(),
ValidOutputFormatsForInput(),
HighSpeedVideoConfigurations())
int[] iii = streamConfigurationMap.getOutputFormats();
256
int[] iii = streamConfigurationMap.getOutputFormats();
256
34
35
842094169
2018年7月1日日曜日
android.hardware.camera2
android.hardware.camera2
下面的代碼可以打開相機
package com.kankanla.e560.m180701_camera;
import android.annotation.SuppressLint;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureRequest;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
mCamera();
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@SuppressLint("MissingPermission")
protected void mCamera() throws CameraAccessException {
SurfaceView surfaceView = findViewById(R.id.surfaceView);
final Surface surface = surfaceView.getHolder().getSurface();
SurfaceHolder surfaceHolder = surfaceView.getHolder();
final CameraManager cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
cameraManager.openCamera("0", new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull final CameraDevice camera) {
try {
camera.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession session) {
try {
CaptureRequest.Builder builder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
builder.addTarget(surface);
CaptureRequest captureRequest = builder.build();
session.setRepeatingRequest(captureRequest, new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) {
super.onCaptureStarted(session, request, timestamp, frameNumber);
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession session) {
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {
}
@Override
public void onError(@NonNull CameraDevice camera, int error) {
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
}
}
下面的代碼可以打開相機
package com.kankanla.e560.m180701_camera;
import android.annotation.SuppressLint;
import android.hardware.camera2.CameraAccessException;
import android.hardware.camera2.CameraCaptureSession;
import android.hardware.camera2.CameraDevice;
import android.hardware.camera2.CameraManager;
import android.hardware.camera2.CaptureRequest;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
mCamera();
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@SuppressLint("MissingPermission")
protected void mCamera() throws CameraAccessException {
SurfaceView surfaceView = findViewById(R.id.surfaceView);
final Surface surface = surfaceView.getHolder().getSurface();
SurfaceHolder surfaceHolder = surfaceView.getHolder();
final CameraManager cameraManager = (CameraManager) getSystemService(CAMERA_SERVICE);
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
cameraManager.openCamera("0", new CameraDevice.StateCallback() {
@Override
public void onOpened(@NonNull final CameraDevice camera) {
try {
camera.createCaptureSession(Arrays.asList(surface), new CameraCaptureSession.StateCallback() {
@Override
public void onConfigured(@NonNull CameraCaptureSession session) {
try {
CaptureRequest.Builder builder = camera.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW);
builder.addTarget(surface);
CaptureRequest captureRequest = builder.build();
session.setRepeatingRequest(captureRequest, new CameraCaptureSession.CaptureCallback() {
@Override
public void onCaptureStarted(@NonNull CameraCaptureSession session, @NonNull CaptureRequest request, long timestamp, long frameNumber) {
super.onCaptureStarted(session, request, timestamp, frameNumber);
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onConfigureFailed(@NonNull CameraCaptureSession session) {
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void onDisconnected(@NonNull CameraDevice camera) {
}
@Override
public void onError(@NonNull CameraDevice camera, int error) {
}
}, null);
} catch (CameraAccessException e) {
e.printStackTrace();
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
}
}
2018年4月21日土曜日
為Fragment添加一個接口,是能在MainActivity下找到Fragment下的子控件View
為Fragment添加一個接口,是能在MainActivity下找到Fragment下的子控件View
public class F1 extends Fragment {
private View view;
public Find_button find_button;
public void getFind_button(Find_button find_button) {
this.find_button = find_button;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
view = inflater.inflate(R.layout.f1, null);
return view;
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
find_button.button(view);
}
}
interface Find_button {
void button(View view);
}
-----------------------------------
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
addf1();
}
protected void addf1() {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
F1 f1 = new F1();
fragmentTransaction.add(R.id.f1, f1, "f1");
fragmentTransaction.commit();
f1.getFind_button(new Find_button() {
@Override
public void button(View view) {
final Button button = view.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
button.setText("F1.Button");
Toast.makeText(MainActivity.this, "F1.Button", Toast.LENGTH_SHORT).show();
}
});
}
});
}
}
2018年4月5日木曜日
Creating a Custom Toast View
Creating a Custom Toast View
创建自定义Toast视图
创建自定义Toast视图
LayoutInflater layoutInflater = getLayoutInflater();
View view = layoutInflater.inflate(R.layout.toastlayout ,null);
TextView textView = view.findViewById(R.id.tx);
textView.setText("Creating a Custom Toast View");
Toast toast = new Toast(getContext());
toast.setView(view);
toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.show();
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
app:srcCompat="@android:drawable/btn_dialog" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/tx"/>
</LinearLayout>
2017年11月17日金曜日
BroadcastReceiver 监听
protected void bttest() {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED:
int x = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, 99);
if (x == BluetoothAdapter.STATE_CONNECTED) {
System.out.println("--------------2222222222222222------4-----");
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
System.out.println(device.getAddress());
System.out.println(device.getName());
System.out.println(device.getBondState());
System.out.println(device.getBluetoothClass());
}
break;
case BluetoothAdapter.ACTION_STATE_CHANGED:
//Bluetooth has been turned on or off.
System.out.println("---------ACTION_STATE_CHANGED---------------------------------------------");
System.out.println(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 22));
break;
case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
System.out.println("--------本地蓝牙适配器已完成设备发现过程。----------------");
break;
case BluetoothAdapter.ACTION_DISCOVERY_STARTED:
System.out.println("-------------本地蓝牙适配器已启动远程设备发现过程。------------");
break;
case BluetoothDevice.ACTION_FOUND:
System.out.println("---------------------发现远程设备。---------------------");
System.out.println(intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE));
BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
System.out.println(bluetoothDevice.getName());
System.out.println(bluetoothDevice.getAddress());
break;
}
}
};
IntentFilter intentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
IntentFilter intentFilter1 = new IntentFilter(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
IntentFilter intentFilter2 = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
IntentFilter intentFilter3 = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
IntentFilter intentFilter4 = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(broadcastReceiver, intentFilter);
registerReceiver(broadcastReceiver, intentFilter1);
registerReceiver(broadcastReceiver, intentFilter2);
registerReceiver(broadcastReceiver, intentFilter3);
registerReceiver(broadcastReceiver, intentFilter4);
}
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED:
int x = intent.getIntExtra(BluetoothAdapter.EXTRA_CONNECTION_STATE, 99);
if (x == BluetoothAdapter.STATE_CONNECTED) {
System.out.println("--------------2222222222222222------4-----");
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
System.out.println(device.getAddress());
System.out.println(device.getName());
System.out.println(device.getBondState());
System.out.println(device.getBluetoothClass());
}
break;
case BluetoothAdapter.ACTION_STATE_CHANGED:
//Bluetooth has been turned on or off.
System.out.println("---------ACTION_STATE_CHANGED---------------------------------------------");
System.out.println(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 22));
break;
case BluetoothAdapter.ACTION_DISCOVERY_FINISHED:
System.out.println("--------本地蓝牙适配器已完成设备发现过程。----------------");
break;
case BluetoothAdapter.ACTION_DISCOVERY_STARTED:
System.out.println("-------------本地蓝牙适配器已启动远程设备发现过程。------------");
break;
case BluetoothDevice.ACTION_FOUND:
System.out.println("---------------------发现远程设备。---------------------");
System.out.println(intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE));
BluetoothDevice bluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
System.out.println(bluetoothDevice.getName());
System.out.println(bluetoothDevice.getAddress());
break;
}
}
};
IntentFilter intentFilter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
IntentFilter intentFilter1 = new IntentFilter(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
IntentFilter intentFilter2 = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
IntentFilter intentFilter3 = new IntentFilter(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
IntentFilter intentFilter4 = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(broadcastReceiver, intentFilter);
registerReceiver(broadcastReceiver, intentFilter1);
registerReceiver(broadcastReceiver, intentFilter2);
registerReceiver(broadcastReceiver, intentFilter3);
registerReceiver(broadcastReceiver, intentFilter4);
}
2017年11月5日日曜日
Wifi 一覧
Wifi 一覧
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
protected void show_wifi_ssid() {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager.isWifiEnabled()) {
List<ScanResult> scanResults = wifiManager.getScanResults();
for (ScanResult x : scanResults) {
System.out.println("--------------------------------------------");
System.out.println(x.toString());
System.out.println(x.BSSID);
System.out.println(x.SSID);
System.out.println(x.capabilities);
}
} else {
Toast.makeText(this, "WifiNull", Toast.LENGTH_SHORT).show();
}
}
I/System.out: SSID: AirPort61998, BSSID: 34:76:c5:5e:f2:2e, capabilities: [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS], level: -87, frequency: 2432, timestamp: 413176363535, distance: ?(cm), distanceSd: ?(cm), wpsState :configured, wpsDeviceName :I-O DATA 802.11n AP Router
I/System.out: 34:76:c5:5e:f2:2e
I/System.out: AirPort61998
I/System.out: [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
protected void show_wifi_ssid() {
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (wifiManager.isWifiEnabled()) {
List<ScanResult> scanResults = wifiManager.getScanResults();
for (ScanResult x : scanResults) {
System.out.println("--------------------------------------------");
System.out.println(x.toString());
System.out.println(x.BSSID);
System.out.println(x.SSID);
System.out.println(x.capabilities);
}
} else {
Toast.makeText(this, "WifiNull", Toast.LENGTH_SHORT).show();
}
}
I/System.out: SSID: AirPort61998, BSSID: 34:76:c5:5e:f2:2e, capabilities: [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS], level: -87, frequency: 2432, timestamp: 413176363535, distance: ?(cm), distanceSd: ?(cm), wpsState :configured, wpsDeviceName :I-O DATA 802.11n AP Router
I/System.out: 34:76:c5:5e:f2:2e
I/System.out: AirPort61998
I/System.out: [WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][WPS][ESS]
2017年10月29日日曜日
SupportActionBar 背景色変更
SupportActionBar 背景色変更
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
int color = android.R.color.black;
Drawable backgroundDrawable = getApplicationContext().getResources().getDrawable(color);
actionBar.setBackgroundDrawable(backgroundDrawable);
android.support.v7.app.ActionBar actionBar = getSupportActionBar();
int color = android.R.color.black;
Drawable backgroundDrawable = getApplicationContext().getResources().getDrawable(color);
actionBar.setBackgroundDrawable(backgroundDrawable);
2017年10月16日月曜日
assets フォルダ内の画像を読み込み
assets フォルダ内の画像を読み込み
AssetManager assetManager = getAssets();
ImageView imageView = (ImageView) findViewById(R.id.imageView);
InputStream inputStream = null;
try {
inputStream = assetManager.open("g1213.png");
} catch (IOException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);
AssetManager assetManager = getAssets();
ImageView imageView = (ImageView) findViewById(R.id.imageView);
InputStream inputStream = null;
try {
inputStream = assetManager.open("g1213.png");
} catch (IOException e) {
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
imageView.setImageBitmap(bitmap);
2017年8月30日水曜日
多言語化
多言語化
res/values/strings.xml - 英語
res/values-ja/strings.xml - 日本語
res/values-zh/strings.xml - 中国語(簡体)
res/values-zh-rTW/strings.xml - 中国語:台湾(繁體)
res/values-zh-rHK/strings.xml - 中国語:香港(繁體)
res/values-zh-rMO/strings.xml - 中国語:マカオ(繁體)
res/values-zh-rSG/strings.xml - 中国語:シンガポール(簡体)
res/values/strings.xml - 英語
res/values-ja/strings.xml - 日本語
res/values-zh/strings.xml - 中国語(簡体)
res/values-zh-rTW/strings.xml - 中国語:台湾(繁體)
res/values-zh-rHK/strings.xml - 中国語:香港(繁體)
res/values-zh-rMO/strings.xml - 中国語:マカオ(繁體)
res/values-zh-rSG/strings.xml - 中国語:シンガポール(簡体)
2017年8月28日月曜日
Android 通知音
Android 通知音
RingtoneManager
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 999) {
Uri uri = (Uri) data.getExtras().get(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
Ringtone ringtone = RingtoneManager.getRingtone(getActivity(), uri);
String name = ringtone.getTitle(getActivity());
System.out.println(name);
System.out.println(uri);
set_sound_url(id, uri.toString());
TextView select_Sound = (TextView) view.findViewById(R.id.select_sound);
select_Sound.setText(get_sound_url_title(id));
}
}
protected void lin2(String id) {
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getString(R.string.select_sound_title));
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false);
startActivityForResult(intent, 999);
}
RingtoneManager
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 999) {
Uri uri = (Uri) data.getExtras().get(RingtoneManager.EXTRA_RINGTONE_PICKED_URI);
Ringtone ringtone = RingtoneManager.getRingtone(getActivity(), uri);
String name = ringtone.getTitle(getActivity());
System.out.println(name);
System.out.println(uri);
set_sound_url(id, uri.toString());
TextView select_Sound = (TextView) view.findViewById(R.id.select_sound);
select_Sound.setText(get_sound_url_title(id));
}
}
protected void lin2(String id) {
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, getString(R.string.select_sound_title));
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALARM);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, false);
startActivityForResult(intent, 999);
}
2017年7月31日月曜日
Android SoundPool soundPool
public class MainActivity extends AppCompatActivity {
protected SoundPool soundPool;
protected int id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
test();
AssetManager am = getAssets();
try {
id = soundPool.load(am.openFd("PCM-M10_441kHz16bit.wav"), 1);
} catch (IOException e) {
e.printStackTrace();
}
soundPool.setOnLoadCompleteListener(new SoundPool.OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int sampleId, int status) {
Toast.makeText(MainActivity.this, "9999999999999", Toast.LENGTH_SHORT).show();
soundPool.play(id, 1, 1, 1, 1, 1);
}
});
}
protected void test() {
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
SoundPool.Builder spb = new SoundPool.Builder();
AudioAttributes.Builder b = new AudioAttributes.Builder();
b.setUsage(AudioAttributes.USAGE_MEDIA);
b.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC);
AudioAttributes a = b.build();
spb.setAudioAttributes(a);
spb.setMaxStreams(12);
soundPool = spb.build();
}
}
}
2017年6月2日金曜日
android Bitmap to File
android Bitmap to File
case REQUEST_IMAGE_CAPTURE:
File f = getFilesDir();
Bitmap bit = data.getExtras().getParcelable("data");
ImageView imageView = (ImageView) findViewById(R.id.bit);
imageView.setImageBitmap(bit);
try {
FileOutputStream fileOutputStream = new FileOutputStream(f.getPath() + "/xxx.jpg");
bit.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
break;
case REQUEST_IMAGE_CAPTURE:
File f = getFilesDir();
Bitmap bit = data.getExtras().getParcelable("data");
ImageView imageView = (ImageView) findViewById(R.id.bit);
imageView.setImageBitmap(bit);
try {
FileOutputStream fileOutputStream = new FileOutputStream(f.getPath() + "/xxx.jpg");
bit.compress(Bitmap.CompressFormat.JPEG, 100, fileOutputStream);
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
break;
登録:
投稿 (Atom)