編輯:關於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給的了:

看起來效果還不錯哦。
Android Socket編程學習筆記
通常也稱作套接字,用於描述IP地址和端口,是一個通信鏈的句柄。在Internet上的主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,並綁定
Android Activity啟動模式的功能驗證
之前一直都是看別人寫的啟動模式,發現網上大多數的內容都是抄襲來抄襲去,直到最近看了開發藝術這本書,發現之前對啟動模式的理解過於簡單,很多東西都沒有考慮到,為了加深理解,於
Android:微信授權登錄與微信分享全解析
前言在移動互聯網浪潮中,聯網APP已經把單機拍死在沙灘上,很多公司都希望自家應用能夠有一套帳號系統,可是許多用戶卻並不一定買賬:我憑啥注冊你家應用的帳號?微博,微信,QQ
Android 圖像處理軟件
在機器視覺實驗室呆了有一年半時間了,但由於自己“任性”。一直以來學習的內容都是自己來安排,我還是堅持認為沒有最好和最簡單的技術,只有自己喜歡的技術