我正在开发一个Android应用程序,需要用户在执行任何其他操作之前登录.目前我已创建名为LoginScreen的主Activity,并且在成功登录后,此活动将启动另一个名为Home的Activity.但我发现这种方法存在问题.如果用户在Home活动中按下按钮怎么办?我不希望用户返回登录屏幕.什么是阻止用户这样做的正确方法.我需要处理按键事件吗?
我想将地图视图缩放到1公里半径,但无法弄清楚如何?
该文档说缩放级别1将地球赤道映射到256像素.那么如何计算我需要设置的缩放级别,以便地图视图显示1KM半径的区域?
更新:
阅读几篇博文后,我写了以下代码:
private int calculateZoomLevel() {
double equatorLength = 6378140; // in meters
double widthInPixels = screenWidth;
double metersPerPixel = equatorLength / 256;
int zoomLevel = 1;
while ((metersPerPixel * widthInPixels) > 2000) {
metersPerPixel /= 2;
++zoomLevel;
}
Log.i("ADNAN", "zoom level = "+zoomLevel);
return zoomLevel;
}
Run Code Online (Sandbox Code Playgroud)
我的想法是,首先我在缩放级别1中计算每像素的米数,根据谷歌显示使用256像素的地球赤道.现在,每个后续缩放级别放大2级,因此每个缩放级别的每个像素的一半.我这样做,直到我有一个缩放级别,每个像素的米乘以屏幕宽度给我小于2000,即2公里跨.
但我不认为我得到的缩放级别显示的是2Km半径的地图.有人可以告诉我这里我做错了什么吗?
我正在尝试编写一个使用netlink与用户进程通信的linux内核模块.我正在使用netlink,因为我想要通信的用户程序只使用套接字进行通信,我无法改变它来添加ioctl()
或任何东西.
问题是我无法弄清楚如何做到这一点.我用Google搜索,但我发现所有的例子都是老喜欢这一个,不再适用于当前的内核版本.我也看了这个问题,但这里的示例使用libnl进行套接字操作,但我想坚持使用标准套接字函数(定义sys/socket.h
).那么有些人可以在这里指导我一些教程或指南或一些可以帮助我理解netlink的界面和用法的东西.我非常感谢一个工作示例,没什么特别的,只是一个非常基本的例子,说明如何建立从用户程序中的套接字到内核中的套接字的连接,然后将数据从用户进程发送到内核并从内核接收回来.
另请不要告诉我查看内核代码.我已经在做了,但这需要花费很多时间,而且我没有留下很多东西.
更新:
经过大量的试验和错误后,我有以下代码将消息从用户程序发送到内核,但是从内核到用户程序的消息即使用netlink_unicast()
不起作用.它不仅没有工作,呼叫挂起系统,然后我必须重新启动机器.有人可以看看,告诉我我在做什么错.该netlink_unicast()
调用在以下代码中进行了注释.它应该是内核到用户程序消息的未注释.
#include <sys/socket.h>
#include <linux/netlink.h>
#define NETLINK_USER 31
#define MAX_PAYLOAD 1024 /* maximum payload size*/
struct sockaddr_nl src_addr, dest_addr;
struct nlmsghdr *nlh = NULL;
struct iovec iov;
int sock_fd;
struct msghdr msg;
void main()
{
sock_fd=socket(PF_NETLINK, SOCK_RAW, NETLINK_USER);
if(sock_fd<0)
return -1;
memset(&src_addr, 0, sizeof(src_addr));
src_addr.nl_family = AF_NETLINK;
src_addr.nl_pid = getpid(); /* self pid */
/* interested in group 1<<0 */
bind(sock_fd, …
Run Code Online (Sandbox Code Playgroud) 我正在处理的应用程序播放音乐文件.如果计时器到期,我希望音乐淡出.我怎么做.我正在使用MediaPlayer播放音乐和音乐文件存在于我的应用程序的原始文件夹中.
我正在使用gnu工具链.我怎样才能在运行时找到函数的调用者?即,例如函数B()被许多函数使用函数指针调用.现在,每当B被调用时,我想打印调用者名称.我需要这个来调试某个问题.
来自[linux\fs.h]的unregister_chrdev()调用如果成功则返回0,其他方面<0.但现在,在较新的内核版本中,函数的返回值已更改为void,因此它不再返回任何内容.
问题:有没有办法找出unregister_chrdev()调用是否成功?
在汇编语言中,我使用.section指令告诉汇编器输出到哪个部分,例如
.section init
Run Code Online (Sandbox Code Playgroud)
有没有办法在C文件中做同样的事情.我希望某些文件的代码进入不同的部分,以便我可以将其加载到不同的内存地址.我知道我可以为ld创建一个脚本并在那里指定部分,但我不想这样做.是否有一些编译器开关或.section指令类型的C文件将执行此操作?
我是Linux内核模块编程的新手.从我到目前为止阅读的材料中,我发现用户程序有3种方式来请求服务或与Linux内核模块通信
问题:我们还有哪些其他选项可用于用户程序和Linux内核模块之间的通信?
我想知道Android应用中的所有活动是在相同的线程中运行还是在自己的单独线程中运行?
如果我想在Linux内核空间中执行用户程序(而不是内核模块),我有哪些选择?
我看过KML(内核模式linux),但这是针对IA-32架构的.我想要一个跨平台的解决方案,可以在嵌入式Linux系统上运行.
android ×4
linux-kernel ×4
c ×3
gcc ×2
audio-player ×1
effects ×1
google-maps ×1
java ×1
kernel ×1
ld ×1
login ×1
netlink ×1
soundeffect ×1
zoom ×1