小编Vla*_*nko的帖子

Android VideoView crop_center

我有一个 RelativeLayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_gravity="center"
    android:foregroundGravity="center"
    android:gravity="center"
    android:orientation="horizontal" >

    <VideoView
        android:id="@+id/videoViewPanel"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_gravity="center" 
        android:layout_centerInParent="true"/>

</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我需要的是显示视频全屏裁剪.如果我可以与ImageView进行比较,我需要将其显示为crop_center.

如何让VideoView不自动调整视频大小以适应中心,但裁剪中心?

android aspect-ratio android-videoview

9
推荐指数
2
解决办法
1万
查看次数

Oreo (8.1) 中的设备蓝牙地址

我需要获取设备的蓝牙 MAC 地址。
在 Android 6 之前,它就像BluetoothAdapter.getDefaultAdapter().getAddress(). 之后,我们不得不使用一个简单的解决方法:String macAddress = android.provider.Settings.Secure.getString(context.getContentResolver(), "bluetooth_address");. 但后来(在 Android 8 AFAIK 中)它也被关闭,但发现了另一种解决方法:

    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
    String bluetoothMacAddress = "";
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M){
        try {
            Field mServiceField = bluetoothAdapter.getClass().getDeclaredField("mService");
            mServiceField.setAccessible(true);

            Object btManagerService = mServiceField.get(bluetoothAdapter);

            if (btManagerService != null) {
                bluetoothMacAddress = (String) btManagerService.getClass().getMethod("getAddress").invoke(btManagerService);
            }
        } catch (NoSuchFieldException e) {

        } catch (NoSuchMethodException e) {

        } catch (IllegalAccessException e) {

        } catch (InvocationTargetException e) {

        }
    } else {
        bluetoothMacAddress = …
Run Code Online (Sandbox Code Playgroud)

android bluetooth android-bluetooth

7
推荐指数
0
解决办法
2329
查看次数

将 strings.xml 中的 word 替换为 buildType 的 gradle

我有一个项目有多个本地化。
现在我必须strings.xml为不同的 buildType替换所有文件中的某个单词。例如,假设我有这个:

<string>My name is Bill</string>
<string>Bill is on duty today</string>
Run Code Online (Sandbox Code Playgroud)

在另一个 buildType 中,我需要

<string>My name is Will</string>
<string>Will is on duty today</string>
Run Code Online (Sandbox Code Playgroud)

我该怎么做(可能通过 Gradle)?

android preprocessor gradle

6
推荐指数
1
解决办法
3133
查看次数

设置文本时TextView保存资源ID

最初我想创建一个库来轻松更改区域设置,而无需重新创建活动以使更改生效.
为此目的,我要保存resIdsetText(int resId)方法在一个变量从其他区域设置这个ID重新设置文本.

问题是,setText(int resId)final在一个TextView.

所以我的问题是,如果有一种方法可以覆盖最终方法(我认为没有),或者添加一些钩子,那么resId无论何时调用此方法,我都能得到它?

我还要加上我尝试过的内容:

首先我考虑使用a InvocationHandler,所以我可以创建一个a TextView作为我的类的字段的实例,并将所有调用传递给它除外setText.但不幸的是我无法在构造函数中返回任何内容.
然后我考虑通过创建一个类来实现一个Decorator模式,该类扩展View,并拥有所有的方法TextView,并创建一个实例TextView作为我的类的一个字段,同样的方式将所有方法调用传递给它,但它不应该有两个原因:

  1. 方法,需要一个实例TextView将无法工作,因为我的类不会扩展TextView
  2. TextView的实现长度为11969行,复制所有方法需要花费很多时间.

java reflection android textview

6
推荐指数
0
解决办法
90
查看次数

Android Enterprise - BluetoothAdapter.startDiscovery() 不开始扫描

我正在使用BluetoothAdapter.startDiscovery()查找特定的蓝牙设备(它是蓝牙 2.0 设备,所以我必须使用BluetoothAdapter.startDiscovery())。我拥有所有必需的权限(蓝牙、位置),并且该应用程序运行良好。

但现在我必须在 Android Enterprise (Work Profile) 下使用这个应用程序。在工作配置文件下,它不会开始扫描。配置文件中的所有限制都被禁用。
经过调查 logcat 我发现了这样几行:

非工作资料日志:

2019-07-29 10:23:13.109 10230-10446/? D/BluetoothAdapterService: startDiscovery() uid = 10126, pid = 6328
2019-07-29 10:23:13.110 10230-10446/? D/BluetoothAdapterService: startDiscovery
Run Code Online (Sandbox Code Playgroud)

工作档案日志:

2019-07-29 10:21:26.536 10230-13473/? D/BluetoothAdapterService: startDiscovery() uid = 1010126, pid = 13390
2019-07-29 10:21:26.536 10230-13473/? W/BluetoothAdapterService: startDiscovery() - Not allowed for non-active user
Run Code Online (Sandbox Code Playgroud)

这是OnePlus 6的日志,但我在三星S10上也观察到了类似的logcat。客户也表示他们在 S9、S8 和某些诺基亚设备(实际上是他们测试过的所有设备)上遇到了同样的问题。

通过 Android 源搜索,我发现以下代码,生成此日志:

    public boolean startDiscovery() {
        if (!Utils.checkCaller()) {
            Log.w(TAG, "startDiscovery() - Not allowed for non-active user"); …
Run Code Online (Sandbox Code Playgroud)

android bluetooth android-enterprise android-work-profile

6
推荐指数
0
解决办法
369
查看次数

渐变色动画

我想要达到的目标:

径向渐变,开始和结束的颜色随着时间的推移从一种定义的颜色平滑地变化到另一种。

到目前为止我尝试过的:

像这样使用 ObjectAnimator:

        searchAnimator = ObjectAnimator.ofFloat(drawThread, new Property<DrawThread, Float>(Float.TYPE, "fraction") {
            @Override
            public Float get(DrawThread object) {
                return object.fraction;
            }

            @Override
            public void set(DrawThread object, Float value) {
                object.setFraction(value);
            }
        }, 0, 1);
        searchAnimator.setDuration(maxSearchDuration);
        searchAnimator.setInterpolator(new LinearInterpolator());
Run Code Online (Sandbox Code Playgroud)

这会DrawThread.setFraction(value);随着时间的推移而调用 。在线程中,我Canvas使用SurfaceView如下方式执行绘图:

mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
mPaint.setDither(true);
mPaint.setStyle(Paint.Style.FILL_AND_STROKE);
radius = (int) Math.sqrt(canvas.getWidth() / 2 * canvas.getWidth() / 2 + canvas.getHeight() / 2 * canvas.getHeight() / 2);
//calculating colors for current fraction using ARGBEvaluator
int start = …
Run Code Online (Sandbox Code Playgroud)

performance animation android gradient

5
推荐指数
1
解决办法
2122
查看次数

需要支持分屏支持React原生Android

我一直在用 React Native 创建电子商务应用程序。我对分屏支持有一些疑问。

如果视图具有滚动视图,则应用程序屏幕工作正常,但没有滚动视图的屏幕将无法工作。

我对以下内容有疑问

  1. 有没有具体的代码呢?
  2. 有没有官方的分屏教程?

提前致谢。

android react-native split-screen

5
推荐指数
0
解决办法
452
查看次数

存储访问框架,takePersistableUriPermission

在我的应用程序中,用户可以选择下载目录。如果他选择外部可移动SD卡(不是模拟SD卡!而是内存,例如真正的Physcel microSD卡),从Android 4.4开始我只能使用SAF(存储访问框架)对其进行写入。

我已经弄清楚如何使用 SAF 创建和写入单个文件:

public void newFile() {
    Intent intent = new Intent(Intent.ACTION_CREATE_DOCUMENT);

    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("text/plain");
    intent.putExtra(Intent.EXTRA_TITLE, "newfile.txt");

    startActivityForResult(intent, CREATE_REQUEST_CODE);
}

public void saveFile() {
    Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
    intent.addCategory(Intent.CATEGORY_OPENABLE);
    intent.setType("text/plain");

    startActivityForResult(intent, SAVE_REQUEST_CODE);
}
Run Code Online (Sandbox Code Playgroud)

这是我的 onActivityResult,我实际上在其中写入文件:

public void onActivityResult(int requestCode, int resultCode,
                             Intent resultData) {
    Uri currentUri = null;

    if (resultCode == Activity.RESULT_OK) {
        if (requestCode == CREATE_REQUEST_CODE) {
            if (resultData != null) {
                Log.d(TAG, "CREATE_REQUEST_CODE resultData = " + resultData);
            }
        } else …
Run Code Online (Sandbox Code Playgroud)

storage android

4
推荐指数
1
解决办法
3877
查看次数

Android的东西(Raspberry Pi 3)BluetoothAdapter.startLEScan(..)

我正在尝试:

BluetoothAdapter.getDefaultAdapter().startLeScan()

我添加了所有必需的权限(我认为):

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Run Code Online (Sandbox Code Playgroud)

请注意,Android内容不支持运行时权限,无论它是否基于Android 7.0运行

而我在日志中得到的是:

java.lang.SecurityException: Need ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission to get scan results
Run Code Online (Sandbox Code Playgroud)

根据文档,它应该能够开始扫描具有所有权限,但由于某种原因它不想.
0.4.0-devpreview在Raspberry Pi 3上使用Android Things

android bluetooth android-things

0
推荐指数
1
解决办法
863
查看次数