Android在Kitkat和Lollipop上获得了新的API,用于视频捕获屏幕.您可以通过ADB工具或通过代码(从Lollipop开始)来完成.
自新API发布以来,许多应用程序都使用此功能,允许记录屏幕,微软甚至制作了自己的Google-Now-On-tap竞争对手应用程序.
使用ADB,您可以使用:
adb shell screenrecord /sdcard/video.mp4
Run Code Online (Sandbox Code Playgroud)
您甚至可以在Android Studio内部执行此操作.
我找不到任何有关如何使用API的教程或解释,这在代码中是有意义的.
我找到的唯一的地方是文件(这里,在"屏幕截图和分享"下),告诉我这个:
Android 5.0允许您使用新的android.media.projection API为您的应用添加屏幕捕获和屏幕共享功能.例如,如果要在视频会议应用中启用屏幕共享,此功能很有用.
新
createVirtualDisplay()方法允许您的应用程序将主屏幕的内容(默认显示)捕获到Surface对象中,然后您的应用可以通过网络发送该对象.API仅允许捕获非安全屏幕内容,而不是系统音频.要开始屏幕捕获,您的应用必须首先通过使用通过该createScreenCaptureIntent()方法获得的Intent启动屏幕捕获对话框来请求用户的许可.有关如何使用新API的示例,请参阅示例项目中的MediaProjectionDemo类.
事实是,我找不到任何"MediaProjectionDemo"样本.相反,我发现了"屏幕截图"样本,但我不明白它是如何工作的,因为当我运行它时,我所看到的只是一个闪烁的屏幕,我不认为它将视频保存到一份文件.样本看起来非常错.
如何使用新API执行这些操作:
另外,我如何自定义它(分辨率,请求的fps,颜色,时间......)?
android screenshot screen-recording android-4.4-kitkat android-5.0-lollipop
使用 api 级别 33 构建我的应用程序后,android 正在合并清单中添加新权限
<permission android:name="com.my.package.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION" android:protectionLevel="signature"/>
<uses-permission android:name="com.my.package.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION"/>
Run Code Online (Sandbox Code Playgroud)
我有一个广播接收器,这个权限与此有什么关系吗?我应该更改任何代码吗?有谁知道添加此内容的原因吗?
<receiver android:enabled="true" android:exported="true" android:name="com.my.package.EventReceiver">
<intent-filter>
<action android:name="com.my.package.event"/>
</intent-filter>
</receiver>
```
Run Code Online (Sandbox Code Playgroud) 我使用html解析器收集了许多数据之后我编写了一个有趣的内置sqlite数据库的android应用程序我发现我的数据在数据库中保存为 文本,是用英语编写的,所以在波斯语中查询我国人民尝试将数字上没有任何回报
String q = "SELECT * FROM studentIDs WHERE field1 LIKE '%"+name+"%' OR field2 LIKE '%"+name+"%'";
Run Code Online (Sandbox Code Playgroud)
虽然在field1上做了很好的字符串,但它不能在field2上作为字符串存储的数字,我应该如何对数字执行语言无关的查询?
我无法将字符从英语更改为其他我希望支持这两种语言,我无法将其类型更改为整数,因为有些记录是英文名称
对不起我的英语并提前致谢
我想获取我的应用的广告ID,但没有成功。
import androidx.ads.identifier.AdvertisingIdClient;
import androidx.ads.identifier.AdvertisingIdInfo;
public class addUtilsJava extends AsyncTask<Context, String, String> {
static String TAG = "addUtilsJava";
private String getIdThread(Context context) {
AdvertisingIdInfo adInfo = null;
try {
adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context).get();
} catch (Exception exception) {
exception.printStackTrace();
}
if (adInfo != null) {
final boolean isLAT = adInfo.isLimitAdTrackingEnabled();
return adInfo.getId();
}
return null;
}
@Override
protected String doInBackground(Context... contexts) {
return getIdThread(contexts[0]);
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
if (s != null)
Log.d(TAG, s);
}
}
Run Code Online (Sandbox Code Playgroud)
它抛出异常提示我 …
我已经创建了从一台设备到另一台设备的 WebRTC 会话,该设备应该能够控制音乐流的音量,但 WebRTC 最初设计用于传输 voice_call,因此使用 voice_call 通道并使用通话音量控制对于非通话应用程序。
我尝试将 WebRTC 源WebRtcAudioTrack中的 STREAM_VOICE_CALL 更改为 STREAM_MUSIC以使用流音乐音量,但唯一的变化是 Android 将其检测为音乐,但音量随通话音量而变化。
我阅读了编译器指南.他们有许多优化技术,如删除冗余代码或删除未使用的变量,没有使用任何方法.
但像js这样的脚本语言没有编译器,因此不需要进行优化.
我读了一篇关于js优化器的文章:
- Google Closure Compiler https://github.com/google/closure-compiler
- UglifyJS https://github.com/mishoo/UglifyJS
Run Code Online (Sandbox Code Playgroud)
真正的问题是反应原生,角度,使用代码优化等平台,还是我应该自己使用?
我正在vhdl中编写代码并遇到此错误
Assignment target incompatible with right side. Cannot convert 'dataArray' to 'STRING'
Run Code Online (Sandbox Code Playgroud)
这是我的代码
entity instructionTranslator is
port(clk :in std_logic;
instructionCode :in std_logic_vector(4 downto 0);
instructionType:out std_logic_vector(1 downto 0) ;
data :out string (1 to 1)--here is data
);
end instructionTranslator;
.
.
.
architecture Translator of instructionTranslator is
type dataArray is array (0 to 13)of string(1 to 1);
process(clk) begin
data<=dataArray(1);
Run Code Online (Sandbox Code Playgroud)
应该如何在vhdl中选择数组的特殊索引.
android ×6
string ×2
ads ×1
android-13 ×1
arrays ×1
java ×1
javascript ×1
kotlin ×1
numbers ×1
optimization ×1
react-native ×1
screenshot ×1
sqlite ×1
uglifyjs ×1
vhdl ×1
webrtc ×1