Android/Launcher/app/src/main/java/com/xixun/launcher/MainActivity.java
2024-07-03 17:21:14 +08:00

234 lines
11 KiB
Java

package com.xixun.launcher;
import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.view.Choreographer;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;
import androidx.activity.ComponentActivity;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.util.ArrayList;
public class MainActivity extends ComponentActivity implements Choreographer.FrameCallback {
@RequiresApi(api = Build.VERSION_CODES.S)
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
var msg = "==== MainActivity onCreate ==== UI Thread: " + Thread.currentThread().getId();
Util.println(msg);
Button btnProg = findViewById(R.id.btnProg);
btnProg.setOnClickListener((View v)->startActivity(new Intent(MainActivity.this, ProgActivity.class)));
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().permitAll().build());
// if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
// if(! Environment.isExternalStorageManager()) {// android 11 且 不是已经被拒绝
// Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
// intent.setData(Uri.parse("package:" + getPackageName()));
// startActivityForResult(intent, 1024);
// }
// } else {
if(ContextCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH) == PackageManager.PERMISSION_GRANTED)
init();
else {
Util.println("---- No permission, Try again ...");
ActivityCompat.requestPermissions(this, new String[] {
android.Manifest.permission.ACCESS_FINE_LOCATION,
android.Manifest.permission.ACCESS_COARSE_LOCATION,
android.Manifest.permission.BLUETOOTH,
android.Manifest.permission.BLUETOOTH_ADMIN,
android.Manifest.permission.BLUETOOTH_CONNECT,
android.Manifest.permission.BLUETOOTH_SCAN,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE,
android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.MANAGE_EXTERNAL_STORAGE,
android.Manifest.permission.RECEIVE_BOOT_COMPLETED,
android.Manifest.permission.INTERNET
}, 999);
}
// }
var intentFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED);
intentFilter.addDataScheme("file");
registerReceiver(new BroadcastReceiver(){
long lastMs;
@Override
public void onReceive(Context context, Intent intent) {
var path = intent.getData().getPath();
Util.println("\nMEDIA_MOUNTED path: "+path);
var ms = System.currentTimeMillis();
if(ms-lastMs<1000) return;
lastMs = ms;
Util.makeText(MainActivity.this, "MEDIA_MOUNTED path: "+path).show();
}
}, intentFilter);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.R) return;
Util.println("onActivityResult "+resultCode+" isExternalStorageManager "+Environment.isExternalStorageManager());
if (requestCode == 1024) {
if(Environment.isExternalStorageManager()) init();
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Util.println("onRequestPermissionsResult "+grantResults[0]);
Util.makeText(MainActivity.this, "onRequestPermissionsResult "+grantResults[0]).show();
if (requestCode == 999 && grantResults[0] == PackageManager.PERMISSION_GRANTED && Util.backImgFile == null)
init();
}
ArrayList<BroadcastReceiver> reces = new ArrayList<>();
BluetoothDevice mBluetoothDevice;
// BluetoothAdapter bluetoothAdapter;
@SuppressLint("UnspecifiedRegisterReceiverFlag")
public void init() {
var dir = Build.VERSION.SDK_INT < Build.VERSION_CODES.R ? Environment.getExternalStorageDirectory().getAbsolutePath() + "/Launcher" : getExternalFilesDir(null).getAbsolutePath();
var msg = "---- dir " + dir;
Util.println(msg);
Util.programsDir = dir + "/programs";
Util.backImgFile = dir + "/background";
IntentFilter filter = new IntentFilter();
filter.addAction(BluetoothDevice.ACTION_FOUND);
//filter.addAction(BluetoothDevice.ACTION_CONNECTION_STATE_CHANGED);
filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
BroadcastReceiver rece;
registerReceiver(rece = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
var action = intent.getAction();
Util.println("\nBluetooth action: " + action);
Util.makeText(MainActivity.this, "Bluetooth action: " + action).show();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
mBluetoothDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
if (ActivityCompat.checkSelfPermission(MainActivity.this, android.Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) {
Util.println("No Permission BLUETOOTH_CONNECT");
Util.makeText(MainActivity.this, "No Permission BLUETOOTH_CONNECT").show();
return;
}
Util.println("Device Name: " + mBluetoothDevice.getName() + " Address: " + mBluetoothDevice.getAddress() + " BondState: " + mBluetoothDevice.getBondState());
if (mBluetoothDevice.getName() == null || !mBluetoothDevice.getName().equals("RCSP"))
return;
if (mBluetoothDevice.getBondState() == BluetoothDevice.BOND_NONE) {
try {
mBluetoothDevice.createBond();
} catch (Exception e) {
Util.printStackTrace(e);
}
}
// } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
// int status = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, 0);
// if (BluetoothAdapter.STATE_ON == status) {
// mBluetoothAdapter.startDiscovery();
// Log.d(TAG, "mBluetoothAdapter.startDiscovery---STATE_ON");
// }
// } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
// if (!isConnected) {
// mBluetoothAdapter.startDiscovery();
// Log.d(TAG, "mBluetoothAdapter.startDiscovery---ACTION_DISCOVERY_FINISHED");
// }
// } else if (BluetoothInputDevice.ACTION_CONNECTION_STATE_CHANGED.equals(action)) {
// int newState = intent.getExtras().getInt(BluetoothProfile.EXTRA_STATE);
// switch (newState) {
// case BluetoothProfile.STATE_CONNECTING:
// Log.d(TAG, "CONNECTING");
// Toast.makeText(context, R.string.bluetooth_connecting, Toast.LENGTH_SHORT).show();
// break;
// case BluetoothProfile.STATE_CONNECTED:
// Log.d(TAG, "CONNECTED");
// Toast.makeText(context, R.string.bluetooth_connected, Toast.LENGTH_SHORT).show();
// RcConnectActivity.this.finish();
// break;
// }
}
}
}, filter);
reces.add(rece);
// var intentFilter = new IntentFilter(Intent.ACTION_MEDIA_MOUNTED);
// intentFilter.addDataScheme("file");
// registerReceiver(new BroadcastReceiver() {
// long lastMs;
//
// @Override
// public void onReceive(Context context, Intent intent) {
// var path = intent.getData().getPath();
// Util.println("\nMEDIA_MOUNTED path: " + path);
// var ms = System.currentTimeMillis();
// if (ms - lastMs < 1000) return;
// lastMs = ms;
// Util.makeText(MainActivity.this, "MEDIA_MOUNTED path: " + path).show();
// }
// }, intentFilter);
// try {
// bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
// if (bluetoothAdapter == null) {
// Util.println("BluetoothAdapter is Null");
// Util.makeText(MainActivity.this, "BluetoothAdapter is Null").show();
// } else {
// Util.println("BluetoothState: " + bluetoothAdapter.getState());
// if (bluetoothAdapter.isEnabled()) {
// Util.println("startDiscovery");
// Util.makeText(MainActivity.this, "bluetoothAdapter startDiscovery").show();
// bluetoothAdapter.startDiscovery();
// } else {
// Util.println("enable");
// Util.makeText(MainActivity.this, "bluetoothAdapter enable").show();
// bluetoothAdapter.enable();
// }
// }
// } catch (Exception e) {
// Util.printStackTrace(e);
// Util.makeText(this, Util.toStr(e)).show();
// }
choreographer.postFrameCallback(this);
}
Choreographer choreographer = Choreographer.getInstance();
int frameCnt;
@Override
public void doFrame(long frameTimeNanos) {
choreographer.postFrameCallback(this);
if(--frameCnt > 0) return;
frameCnt = 600;
//System.out.println("root Width: "+root.getWidth());
// if(ActivityCompat.checkSelfPermission(this, android.Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) {
// Util.println("No Permission BLUETOOTH_SCAN");
// return;
// }
// Util.println("BluetoothAdapter is Discovering: " + bluetoothAdapter.isDiscovering());
}
@Override
protected void onDestroy() {
super.onDestroy();
for(var rece : reces) unregisterReceiver(rece);
}
}