編輯:關於Android編程
原文在這裡:Sharing with Qt on Android 。是 2014 年 12 月 12 日的文章,恨不相逢未嫁時……Sigh,又胡扯了……還是 Google 強大,可以搜索到好東西。
我們剛剛發布了 GiraffPanic(一款用Qt & QML 開發的邏輯類益智游戲。譯者注:Google Play中可以下載到,收費) 的一個新版本。在這個新版本中,我們給用戶提供了相互之間分享解鎖密碼(code)的機會以方便用戶解鎖新的關卡(levels)。我們想為不同的設備之間共享密碼找一個友好的方式,不需要把密碼拷貝粘貼到另外的應用中。嘗試了多種途徑(都沒法正常工作)後,我們發現可以在我們的應用裡直接調用 Android 原生的分享菜單。使用這種方式,既保持了我們代碼的整潔,又能支持宿主設備所提供的所有共享方式。
使用那種共享方式,應用不需要任何特別的權限。
下面是最終效果(圖片來自英文原文):
你可以在這裡(gitorious.org)下載測試應用的示例代碼。為了更容易理解,後面展示的代碼特意做了簡化。
好啦,我們都要做哪些工作呢?
... public class ShareIntent { static public void shareText(String title, String subject, String content, QtActivity activity) { Intent share = new Intent(Intent.ACTION_SEND); share.setType(text/plain); share.putExtra(Intent.EXTRA_SUBJECT, subject); share.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(content).toString()); share.putExtra(Intent.EXTRA_HTML_TEXT, content); activity.startActivity(Intent.createChooser(share, title)); } } ...
... QT += androidextras ...
... void QtAndroidShare::share(const QString &title, const QString &subject, const QString &content) { QAndroidJniObject jTitle = QAndroidJniObject::fromString(title); QAndroidJniObject jSubject = QAndroidJniObject::fromString(subject); QAndroidJniObject jContent = QAndroidJniObject::fromString(content); QAndroidJniObject activity = QtAndroid::androidActivity(); QAndroidJniObject::callStaticMethod( net/exit0/androidshare/ShareIntent, shareText, (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String; Lorg/qtproject/qt5/android/bindings/QtActivity;)V, jTitle.object (), jSubject.object (), jContent.object (), activity.object () ); }
callStaticMethod 方法的參數如下:
className - 代表了你要調用的 Java 方法所屬的類,全限定類名methodName - 你要調用的 Java 方法名字signature - Java 方法的簽名parameters - 要傳遞的所有參數
Bogdan 在 Qt on Android Episode 5 一文中對 Qt 和 JNI 做了很好的概述。(譯者注:可以參考我翻譯的中文版本——Qt on Android Episode 5(翻譯))。
為了讓 AndroidShare 類在 QML 環境中可見,首先我們像下面這樣聲明 AndroidShare::share 方法:
Q_INVOKABLE virtual void share(const QString &title, const QString &subject, const QString &content);
... QQmlApplicationEngine engine; QQmlContext *context = engine.rootContext(); qmlRegisterType(QtAndroidShare, 1, 0, ShareIntent); context->setContextProperty(shareIntent, new QtAndroidShare()); ...
... Button { text: Press to share onClicked: { shareIntent.share(title.text, subject.text, content.text); } } ...
希望這篇文章對看到的人有所幫助。
要是你想看看代碼在你游戲中運行的效果,可以到 Google Play 中下載。用黑莓的兄弟,看 BlackBerry World ,N9(諾記的手機,是原文作者還在用的手機之一)的粉兒可以點這裡下載。
譯者注:Qt 跨平台的好處體現出來啦……
下面是游戲截圖,譯者foruok給的了:
看起來效果還不錯哦。
通常也稱作套接字,用於描述IP地址和端口,是一個通信鏈的句柄。在Internet上的主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,並綁定
之前一直都是看別人寫的啟動模式,發現網上大多數的內容都是抄襲來抄襲去,直到最近看了開發藝術這本書,發現之前對啟動模式的理解過於簡單,很多東西都沒有考慮到,為了加深理解,於
前言在移動互聯網浪潮中,聯網APP已經把單機拍死在沙灘上,很多公司都希望自家應用能夠有一套帳號系統,可是許多用戶卻並不一定買賬:我憑啥注冊你家應用的帳號?微博,微信,QQ
在機器視覺實驗室呆了有一年半時間了,但由於自己“任性”。一直以來學習的內容都是自己來安排,我還是堅持認為沒有最好和最簡單的技術,只有自己喜歡的技術