我需要实现一个Android应用程序,允许用户配置VPN连接,而无需访问Android设备的本机菜单.有了这个,我有两个问题:
在Android 4.0 +(api级别14及以上)我发现有一个名为VpnService的新组件,它提供了一个钩子,用于创建虚拟网络接口,配置它并拦截/转发从它到VPN服务器的小包,但是没有在PPTP或IPSec等vpn协议中构建,只有实现它们的可能性.我的问题是,是否有任何现成的PPTP和IPSec解决方案可以与VpnService一起使用?
在早期版本的Android中,从我到目前为止所发现的,似乎使用VPN的唯一方法是通过在android中包装(使用反射)一些隐藏的api来访问和配置设备的内置vpn解决方案但这是一个由于设备需要植根,因此隐藏的api实现可能因设备而异,从操作系统版本到操作系统版本也有所不同.有没有更好的方法以编程方式配置底层Linux操作系统的内置VPN?
我开发了一个小应用程序,用于全屏显示摄像头预览.我正在使用Camera API.
这是活动布局:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- This is the container for the camera preview screen -->
<FrameLayout android:id="@+id/camera_preview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
当设备处于纵向状态时,显示器将垂直缩放以匹配设备屏幕的高度 - 因此纵横比与本机相机的纵横比不同.这些是2张图片,更好地解释了我所说的内容:


第一张图像是使用原生相机设备制作的.第二张图片是用我的应用程序制作的,相机全屏 - 图像歪斜,拉伸以适应屏幕.
无论getSupportedPreviewSizes()mehod 提供的预览尺寸和无失真,我都需要将相机预览设置为全屏.有没有办法实现这个目标?当相机预览全屏时,有没有办法保持适当的宽高比?我希望这可以通过操作系统自动完成 - 裁剪图像以匹配所请求的分辨率,同时保持宽高比,但这不会发生.
我试图使SurfaceView显示器大于显示器(遵循这个问题:将相机预览适合大于显示器的SurfaceView),但在我的情况下不行,因为我捕获快照(6帧/秒)和那些不是用户在屏幕上看到的内容(框架包含所有相机预览,即使并非所有相机都在屏幕上可见).
我在这里发布:https://www.dropbox.com/s/3d52xt8kazynsae/CameraFullScreen.7z?v = 0mcn我做的整个项目.
任何想法/解决方案对我来说都非常重要.非常感谢.
================================================== ======================
由于ss1271答案更新:
我将分析你为三星Galaxy Ace II上面写的一些分辨率.
I.屏幕分辨率:480x800 - 宽高比3:5 = 0,6
II.getSupportedPreviewSizes - 我几乎可以肯定这些值来自后置摄像头.以下是这些决议的方面比率:
2560x1920 - 0,75
2560x1536 - 0,60
2048x1536 - 0,75
2048x1232 - …Run Code Online (Sandbox Code Playgroud) 我正在尝试修复的问题如下:我正在使用a TextView并且我使用a Spannable设置一些字符粗体.文本需要有2行(android:maxLines="2")的格言,我希望文本被椭圆化,但由于某种原因,我不能使文本椭圆化.
这是简单的代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:maxLines="2"
android:ellipsize="end"
android:bufferType="spannable"
android:text="@string/app_name"
android:textSize="15dp"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
和活动:
public class MyActivity extends Activity {
private TextView name;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
name= (TextView) findViewById(R.id.name);
name.setText("Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy ");
Spannable spannable = (Spannable)name.getText();
StyleSpan boldSpan = new StyleSpan( Typeface.BOLD ); …Run Code Online (Sandbox Code Playgroud) 我有一个自定义相机应用程序,我想要任何预览尺寸以全屏模式显示它而不拉伸相机预览图像.对于这一点,我需要做的surfaceView大于屏幕,以保持宽高比,所以实际上用户将看到小于照相机实际拍摄.
出于某种原因,我无法使SurfaceView屏幕尺寸大于屏幕尺寸.
到目前为止我尝试过的:
调整surfaceChanged方法中的相机预览
调整on onMeasure方法中的相机预览
onLayout FLAG_LAYOUT_NO_LIMITS到活动 - 信息clipChildren 用于表面视图 - 信息android:layout_width="852px" getWindow().setLayout(852, 1280); 在活动中但是没有任何成功 - 每次的行为都是一样的:它看起来好一秒钟,然后就会拉长.
这是代码:
public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private static final int CAMERA_ROTATE_ANGLE = 90;
private SurfaceHolder cameraHolder;
private Camera androidHardCamera;
private Context context;
public CameraPreview(Context context) {
super(context);
this.context = context;
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is …Run Code Online (Sandbox Code Playgroud) 我有一个switch按钮(实际上是一个自定义按钮),我想出于某种原因禁用滑动功能; 我希望用户只能点击它.有没有办法实现这个目标?谢谢.
我有自定义相机应用程序,我需要能够打开闪光灯(实际上是火炬模式)/关闭.
在这种情况下我需要什么样的许可?
1.Only
<uses-feature android:name="android.hardware.camera"/>
<uses-permission android:name="android.permission.CAMERA"/>
Run Code Online (Sandbox Code Playgroud)
2.来自1加:
<permission android:name="android.permission.FLASHLIGHT"
android:permissionGroup="android.permission-group.HARDWARE_CONTROLS"
android:protectionLevel="normal"/>
Run Code Online (Sandbox Code Playgroud)
我想这是在你想使用Flash时使用的,但没有相机(就像在这种情况下:Android - 使用相机Flash)
3.从1加:
<uses-permission android:name="android.hardware.camera.flash"/>
Run Code Online (Sandbox Code Playgroud)
EDITED(感谢@maclir):
以上行不正确.正确的是:
<uses-permission android:name="android.permission.CAMERA"/>
Run Code Online (Sandbox Code Playgroud)
developer.android.com:"Subfeature.该应用程序使用设备相机的闪光灯." (http://developer.android.com/guide/topics/manifest/uses-feature-element.html)
在所有3个案例中,在2个设备上测试,工作正常 - 我可以激活/停用闪光灯,但我想确定它们的确切含义.奇怪的是,即使没有选项3,它也能正常工作......对于什么比使用选项3?
我想我错过了一些东西......
回答
<uses-permission android:name="android.permission.CAMERA" />
Run Code Online (Sandbox Code Playgroud)
是必须的,以便使用相机(我没有通过Intent使用相机,我有一个自定义相机应用程序)
和:
<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
Run Code Online (Sandbox Code Playgroud)
是我在应用程序中使用的相机特定功能.
android:required="false"表示Google Play 不会阻止将应用程序安装到不包含这些相机功能的设备上 - 因此拥有没有相机和相机闪光灯的设备的用户将能够从市场上安装该应用程序.
http://developer.android.com/reference/android/hardware/Camera.html
我有一个表,students与3列:id,name,和age.我有一个列和UNIQUE索引.Index_2nameage
CREATE TABLE `bedrock`.`students` (
`id` INTEGER UNSIGNED NOT NULL
AUTO_INCREMENT, `name` VARCHAR(45)
NOT NULL, `age` INTEGER UNSIGNED NOT
NULL, PRIMARY KEY (`id`), UNIQUE
INDEX `Index_2` USING BTREE(`name`,
`age`) ) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
我试过这个插入选项:
insert into students (id, name, age)
values (1, 'Ane', 23);
Run Code Online (Sandbox Code Playgroud)
这工作正常.比我尝试过这个(参见Ané - e acute):
insert into students (id, name, age)
values (2, 'Ané', 23);
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
"Duplicate entry 'Ané-23' for key 'Index_2'" …Run Code Online (Sandbox Code Playgroud) 现在我有一个水平进度条,通过ProgressBar setProgress方法以编程方式更新:
<ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="0dip"
android:layout_weight="1"
android:layout_height="20dip"
android:id="@+id/progressbar"
>
</ProgressBar>
Run Code Online (Sandbox Code Playgroud)
有没有办法将此进度条转换为圆形(饼图)并能够以编程方式更新进度?
我想要的例子:

我有一个TexView需要放在格言2行,并有一个可链接的文本.如果我将LinkMovementMethod设置为文本视图,我会得到一个可滚动的,TextView并忽略ellipsize.
Xml代码:
<TextView
android:id="@+id/text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="4dip"
android:clickable="true"
android:maxLines="2"
android:ellipsize="end"
android:scrollHorizontally="false"
android:scrollbars="horizontal"
android:isScrollContainer="false"/>
Run Code Online (Sandbox Code Playgroud)
这是我的活动:
public class MyActivity extends Activity {
private TextView tv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv = (TextView) findViewById(R.id.text_view);
SpannableStringBuilder captionSpan = new SpannableStringBuilder();
captionSpan.append("a very long text here a very long text here a very long text here a very long text here a very long text here a very long text here a very long text here a …Run Code Online (Sandbox Code Playgroud) 我有 30 张分辨率为 480 x 640 的 JPEG 图像 (.jpg)。每张图像大约需要 20KB(所有图像大约需要 600KB)。
我正在使用FFmpeg命令将这些图像编码为H264格式的视频。
我需要非常快地完成此操作 - 大约 1 秒。
使用经典命令:
ffmpeg -y -f image2 -r 1/5 -i image_%d.jpg -c:v libx264 -r 30 video.mp4
Run Code Online (Sandbox Code Playgroud)
大约需要90 秒。
添加后 -preset ultrafast:
ffmpeg -y -f image2 -r 1/5 -i image_%d.jpg -c:v libx264 -preset ultrafast -r 30 video.mp4
Run Code Online (Sandbox Code Playgroud)
编码大约需要15 秒,这要好得多,但仍然不够
我也尝试过其他参数,例如:
-profile:v baseline
-qscale:v
-b:v 1000k
-crf 24
Run Code Online (Sandbox Code Playgroud)
但编码时间不低于 10 秒。
我不熟悉 FFmpeg 命令,也不熟悉我需要使用的参数,这就是我在这里发布这个问题的原因。
视频质量需要好,不需要完美。
请注意:我正在使用 ProcessBuilder …
android ×9
constraints ×1
encoding ×1
ffmpeg ×1
h.264 ×1
indexing ×1
mysql ×1
surfaceview ×1
textview ×1
vpn ×1