我只能找到有关Parcelable的Java示例.我的目标是在本机C++(而不是NDK)中创建一个简单的服务和客户端,它将使用Binder来接收和发送序列化的自定义对象.
MyClass
+ std::string
+ enum
+ int
+ bool
Run Code Online (Sandbox Code Playgroud) c++ java-native-interface android android-ndk android-binder
我试图从本机cpp代码调用一个intent.基本上,根据我的理解,我必须编写一个Parcel以匹配frameworks/base/core/java/android/app/ActivityManagerNative.java中的确切反序列化序列; 案例BROADCAST_INTENT_TRANSACTION.
到目前为止的进展是我已经在Java应用程序中收到了意图,但我对bundle有效负载有一些问题.我已经调试了Java应用程序,似乎它将int作为int读取而不是读取包含bundle的键的类型的int.
W/System.err( 1386): java.lang.RuntimeException: Parcel android.os.Parcel@71aa5c5: Unmarshalling unknown type code 6815843 at offset 12
W/System.err( 1386): at android.os.Parcel.readValue(Parcel.java:2228)
W/System.err( 1386): at android.os.Parcel.readArrayMapInternal(Parcel.java:2485)
W/System.err( 1386): at android.os.BaseBundle.unparcel(BaseBundle.java:221
Run Code Online (Sandbox Code Playgroud)
这是使用的本机代码
#include <unistd.h>
#include <binder/IBinder.h>
#include <binder/IServiceManager.h>
#include <binder/Parcel.h>
#include <utils/String8.h>
#include <assert.h>
namespace android {
static const int BROADCAST_INTENT_TRANSACTION = IBinder::FIRST_CALL_TRANSACTION + 13;
int send_intent()
{
int NULL_TYPE_ID = 0;
sp<IServiceManager> sm = defaultServiceManager();
sp<IBinder> am = sm->checkService(String16("activity"));
assert(am != NULL);
Parcel data, reply;
data.writeInterfaceToken(String16("android.app.IActivityManager"));
data.writeStrongBinder(NULL);
/*intent*/
data.writeString16(String16("com.etc.etc.receiver")); /* action */ …Run Code Online (Sandbox Code Playgroud) 假设我有一个国家/地区的城市列表.如果用户单击其中一个,我想要显示一个新屏幕,其中包含该列表元素的详细信息.此外,该屏幕将有其他按钮(例如:写评论,发布图片)
我怎样才能实现这一目标?
我有一个.service用于一个我不想在启动时启动的进程,但是在给定的时间以某种方式从另一个已运行的应用程序调用它.
另一种选择是在/ usr/share/dbus-1/services中放置一个D-Bus(我在我的应用程序中使用glib dbus)服务文件,并以某种方式从我的应用程序中调用它.此外,我也无法做到这一点.
比方说,从我的DBUS服务文件/usr/share/dbus-1/services是com.callThis.service
从我的主要服务文件/lib/systemd/system is com.startThis.service
如果我从命令行运行一个简单的内省:
/home/root # dbus-send --session --type=method_call --print-reply \
--dest=com.callThis /com/callThis org.freedesktop.DBus.Introspectable.Introspect
Run Code Online (Sandbox Code Playgroud)
将调用D-Bus服务文件,它将启动Exec(com.starThis)中的内容.问题是我想使用D-Bus glib从C/C++代码实现这一点.
如果我将一个对象转换为基类型并将其存储在std :: map中,然后将其取回并将其重新转换为派生类型,那么我是否仍然在派生类成员中拥有正确的数据?
我需要制作一种特定的演员吗?
我正在对可以卸载的文件执行mmap()(该文件位于用户可以随时删除的USB设备上),如果文件已卸载,我的应用程序崩溃然后我尝试访问任何元素在缓冲区.
对此有何解决方案?
我有Arch Linux Python 3.3.0我已经下载了最新的repo,如果我尝试从Google示例中执行repo init,我会收到此错误:
[username@otp-username-l2 teste]$ repo init -u https://android.googlesource.com/platform/manifest
Traceback (most recent call last):
File "/home/username/bin/repo", line 738, in <module>
main(sys.argv[1:])
File "/home/username/bin/repo", line 705, in main
_Init(args)
File "/home/username/bin/repo", line 234, in _Init
_CheckGitVersion()
File "/home/username/bin/repo", line 274, in _CheckGitVersion
if not ver_str.startswith('git version '):
TypeError: startswith first arg must be bytes or a tuple of bytes, not str
Run Code Online (Sandbox Code Playgroud)
我被迫做一个新的repo init的原因是我必须从已经初始化的repo做一个提交,但我已经从任何地方改变了git用户,我仍然得到这个:
Writing objects: 100% (12/12), 966 bytes, done.
Total 12 (delta 11), reused 0 (delta 0)
o …Run Code Online (Sandbox Code Playgroud) 我可以在没有实现D-Bus方法的应用程序启动并运行的情况下调用dbus_g_proxy_new_for_name吗?我不确定这样做是否是好的做法,或者是否通常.
我的std :: map看起来像这样.
std::map<int, std::string> *myMap = new std::map<int, std::string>[100];
Run Code Online (Sandbox Code Playgroud)
我该如何删除?是否delete myMap足够?
我需要一个方法,它可以给我自系统启动以来经过的毫秒数或秒数.我可以解析/proc/uptime,但我不能失去这个I/0和解析的性能.
我正在使用Linux和C/C++.也许我可以放一些Qt/Boost,但最好是原生的东西.
目前,我有基本的C++和PHP技能.但是,我想切换到C#和ASP(对于Web部分).为什么?你会问.因为我有机会很容易地学习C#(包括OOP-ed)到一个非常高级的水平.因为我读到ASP与C#非常相似,我正在考虑学习它.
那么,有很多东西在C#中无法完成?什么样的东西?ASP的相同问题.
Process: com.josephvarkey996gmail.test1, PID: 3348
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.josephvarkey996gmail.test1/com.josephvarkey996gmail.test1.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File com.parse.ParsePlugins.getParseDir()' on a null object reference
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5257)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File com.parse.ParsePlugins.getParseDir()' on a null object reference
at com.parse.Parse.getParseDir(Parse.java:304)
at com.parse.ParseObject.getFromDisk(ParseObject.java:667)
at com.parse.ParseUser$10.then(ParseUser.java:1056)
at com.parse.ParseUser$10.then(ParseUser.java:1003)
at bolts.Task$14.run(Task.java:796)
at bolts.BoltsExecutors$ImmediateExecutor.execute(BoltsExecutors.java:105)
at bolts.Task.completeAfterTask(Task.java:787)
at bolts.Task.continueWithTask(Task.java:599)
at bolts.Task.continueWithTask(Task.java:610)
at …Run Code Online (Sandbox Code Playgroud)