我在Android应用程序的C代码中有一个复杂的结构,我想在Java端使用它.我已经用google和stackoverflow做了一些研究,所以我从我的C结构创建了java类,但现在如何用Java创建它.
我已经找到了这些信息,关于在类中创建一个指针并在C端使用它:
Get the field ID : (*env)->GetFieldID(...)
Get the pointer : (*env)->GetLongField(...)
Set the pointer : (*env)->SetLongField(...)
Run Code Online (Sandbox Code Playgroud)
但我不明白它是如何运作的......
在上面,你可以找到我到目前为止所做的事情......不是那么多!在C方面:
ComplexStructure Java_com_main_MainActivity_listenUDP(JNIEnv* env, jclass clazz)
{
int i,taille;
ComplexStructure myStruct;
taille = -1;
taille = recvfrom(socket, &myStruct, sizeof(ComplexStructure ), 0, &rcvAddr, &sizeOfSock);
if(taille != -1)
{
return myStruct;
}
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
而在Java方面:
public void getFromUDP() {
ComplexClass myClass = new ComplexClass();
myClass = listenUDP();
}
@Override
public void run() {
initUDP();
getFromUDP();
}
public static native ComplexClass listenUDP();
public …Run Code Online (Sandbox Code Playgroud) 我刚买了一台带有7英寸显示屏触摸屏和外壳的Raspberry Pi 3.
不幸的是,外壳不允许我手动旋转屏幕,所以我的应用程序颠倒了.
我尝试使用以下adb命令从控制台执行此操作,但没有运气:
adb shell content insert --uri content://settings/system --bind name:s:accelerometer_rotation --bind value:i:0
Run Code Online (Sandbox Code Playgroud)
然后
adb shell content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:1
Run Code Online (Sandbox Code Playgroud)
要么
adb shell content insert --uri content://settings/system --bind name:s:user_rotation --bind value:i:3
Run Code Online (Sandbox Code Playgroud)
有没有办法从配置标志直接执行它,从启动处理屏幕方向?
我想知道是否有可能创建一个私人广播.我实际上在我的活动和使用中注册了broadcastreceiver
sendOrderedBroadcast(broadcast);
Run Code Online (Sandbox Code Playgroud)
发送广播的方法.但是,目前,用于此方法的intent(广播)定义如下:
Intent broadcast = new Intent("com.mypackage.broadcast");
Run Code Online (Sandbox Code Playgroud)
因此,声明此包名称的每个外部应用程序都可以监听我发送的内容,而我不想这样做.
那么如何让这个变得不可能,没人能听我的广播?
我想将GeoPoint转换为屏幕点,以便识别触摸事件之上的所有对象.所以,我试过这个:
Projection projection = this.mapView.getProjection();
GeoPoint gie = new GeoPoint(lat, lon);
Point po = new Point();
projection.toPixels(gie, po);
Run Code Online (Sandbox Code Playgroud)
但是,po.x和po.y不是屏幕坐标,而是mapview coords在像素而不是lat,lon.
来自android开发者网站:
toPixels(GeoPoint in,android.graphics.Point out)将给定的GeoPoint转换为相对于提供此Projection的MapView左上角的屏幕像素坐标.
那么,是否可以在正确的屏幕上转换它?
我想知道+ touch事件旁边的所有x GeoPoint,如上例所示:
----------------------------------------------------------------
(0,0) -----------> x |
| |
| |
| | <-- My screen
| + (touch event) |
\/ x (my GeoPoint) |
y |
|
----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我得到了这样的触摸事件:
@Override
public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
Run Code Online (Sandbox Code Playgroud)
在这里,在这段代码中,x和y是真正的屏幕坐标(硬件坐标,而不是mapview)
我知道我也可以在GeoPoint中转换x,y屏幕坐标,将它们与我的GeoPoint进行比较,但是,由于缩放级别,我无法得到我想要的.
最近我的GCM推送消息通知不再起作用.我没有更改任何内容,在我的Google API控制台中,如果是白名单IP地址,我已经注册了我的专用服务器的IPV6.
但是当我尝试访问GCM服务时,我总是收到错误:
擅自
错误401
也试过IPV4但没有成功......
我在自己的电脑上尝试过相同的脚本,一切顺利......
任何想法都会非常感激:)
谢谢你的帮助
我有以下 JSON:
[
{
2: {
"c": true
}
},
{
3: {
"p": 10
}
}
]
Run Code Online (Sandbox Code Playgroud)
我想转换为 CBOR 格式。根据 cbor.me 我有以下输出:
82A102A16163F5A103A161700A
但是,当使用 Jackson Binary CBOR Serializer 时,我有以下输出:
82BF02BF6163F5FFFFBF03BF61700AFFFF
这并没有错,但没有优化......我有额外的 4 个不必要的字节添加到它真正可能的位置。
然后我尝试手动序列化 JSON 但结果相同:
@Override
public void serialize(Request value, JsonGenerator jgen, SerializerProvider provider)
throws IOException, JsonProcessingException {
jgen.writeStartArray(value.getDataList().size());
for (Data data : value.getDataList()) {
jgen.writeStartObject(new Map[1]);
jgen.writeFieldId(data.getItem());
jgen.writeStartObject();
if (data.getObject().getC() != null) {
jgen.writeBooleanField("c", data.getObject().getC());
}
if (data.getObject().getP() != null) {
jgen.writeNumberField("p", data.getObject().getP());
}
jgen.writeEndObject();
jgen.writeEndObject();
} …Run Code Online (Sandbox Code Playgroud) 我正在创建一个Canvas对象(直线,顶点,三角形......),我想在它们周围应用一个旋转.
我不能使用Canvas的rotate()方法,因为点附加到Map上的GeoPoint,所以如果我使用rotate()方法,则所有地图都在旋转......
问题是Canvas需要Point(int,int)并且应用旋转会因cos和sin函数而创建double.因此,当我将旋转应用于所有点时,由于将double转换为int,我发生了一些图形问题...
所以我正在寻找最好的解决方案.
这是我的轮换代码:
public Point rotatePoint(Point pt, Point center)
{
this.angle = ((this.angle/180)*Math.PI);
double cosAngle = Math.cos(this.angle);
double sinAngle = Math.sin(this.angle);
pt.x = center.x + (int) ((pt.x-center.x)*cosAngle-(pt.y-center.y)*sinAngle);
pt.y = center.y + (int) ((pt.x-center.x)*sinAngle+(pt.y-center.y)*cosAngle);
return pt;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个圆角的正方形线进度条,以围绕图像绘制进度。
到目前为止,我有以下XML定义了我的圆角正方形线:
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
<stroke
android:width="6dp"
android:color="@android:color/holo_green_light" />
<padding
android:left="5dp"
android:right="5dp"
android:bottom="5dp"
android:top="5dp" />
<corners android:radius="50dp" />
</shape>
Run Code Online (Sandbox Code Playgroud)
我知道这种解决方案:https : //github.com/mrwonderman/android-square-progressbar,但我对此并不感兴趣,因为效果不是我想要的。
我尝试在圆角正方形线的顶部创建一个普通圆,并尝试将其与PorterDuff合并,但是到目前为止,我也无法创建进度条效果。画一个圆圈,画出进度。
我还尝试过创建圆角正方形程序,以防XML膨胀被视为纯图像并且在PorterDuff合并过程中考虑了所有像素。但结果相同。
我需要使用所有请求参数生成签名验证:
所以,我写了一个小的SignatureInterceptor类:
public class SignatureInterceptor implements Interceptor {
private String token;
private String signature = "";
private String method;
private String query;
public SignatureInterceptor() {
this.token = "456456456456";
}
@Override
public com.squareup.okhttp.Response intercept(Chain chain) throws IOException {
Request originalRequest = chain.request();
if (originalRequest.body() == null || originalRequest.header("Content-Encoding") != null) {
return chain.proceed(originalRequest);
}
method = originalRequest.method();
query = originalRequest.urlString();
Request authenticatedRequest = originalRequest.newBuilder()
.method(originalRequest.method(), authenticate(originalRequest.body()))
.addHeader("signature", signature)
.build();
return chain.proceed(authenticatedRequest);
}
private RequestBody authenticate(final RequestBody body) …Run Code Online (Sandbox Code Playgroud) android ×5
java ×4
android-ndk ×1
c ×1
casting ×1
cbor ×1
interceptor ×1
jackson ×1
json ×1
line ×1
okhttp ×1
raspberry-pi ×1
retrofit ×1
rotation ×1
share ×1