0

我正在開發Titanium SDK 2.1.3併爲Android部署,我跟着this article將我的應用程序包含在可以打開類似application/*,image/*和audio/*的MIME類型的應用程序列表中。它使我的Android清單看起來像這樣:Android - 如何使用Titanium 2.1.3打開電子郵件附件?

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="nenvo.com.desktop" android:versionCode="1" 
    android:versionName="1"> 
    <uses-sdk android:minSdkVersion="8" /> 

    <!-- TI_MANIFEST --> 

    <application android:icon="@drawable/appicon" 
     android:label="Desktop Lite" android:name="DesktopLiteApplication" 
     android:debuggable="false"> 

     <!-- TI_APPLICATION --> 

     <activity android:name=".DesktopLiteActivity" 
      android:label="Desktop Lite" android:theme="@style/Theme.Titanium" 
      android:configChanges="keyboardHidden|orientation"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
      <intent-filter> 
       <data android:scheme="content" /> 
       <action android:name="android.intent.action.VIEW" /> 
       <category android:name="android.intent.category.DEFAULT" /> 
       <category android:name="android.intent.category.BROWSABLE" /> 
       <!-- open any mime type file --> 
       <data android:mimeType="application/*" /> 
       <data android:mimeType="audio/*" /> 
       <data android:mimeType="image/*" /> 
       <data android:mimeType="text/*" /> 
       <data android:mimeType="video/*" /> 
      </intent-filter> 
     </activity> 



     <activity android:name="org.appcelerator.titanium.TiActivity" 
      android:configChanges="keyboardHidden|orientation" /> 
     <activity android:name="org.appcelerator.titanium.TiTranslucentActivity" 
      android:configChanges="keyboardHidden|orientation" 
      android:theme="@android:style/Theme.Translucent" /> 
     <activity android:name="org.appcelerator.titanium.TiModalActivity" 
      android:configChanges="keyboardHidden|orientation" 
      android:theme="@android:style/Theme.Translucent" /> 
     <activity android:name="ti.modules.titanium.ui.TiTabActivity" 
      android:configChanges="keyboardHidden|orientation" /> 
     <activity android:name="ti.modules.titanium.ui.android.TiPreferencesActivity" /> 

     <service android:name="org.appcelerator.titanium.analytics.TiAnalyticsService" 
      android:exported="false" /> 


    </application> 

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/> 
    <uses-permission android:name="android.permission.VIBRATE"/> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 


</manifest> 

現在,當電子郵件的附件試圖打開我的應用程序啓動時,問題是,我不知道該如何找回我想要的文件打開,我想在我開始跟蹤和恢復事件對我的Android應用程序:

activity.addEventListener('start', function() { 
    Ti.API.log('*** Start Event Called ***'); 
    var args = activity.getIntent().getData(); // this is null 
    functions.handleFunction(args); 
}); 

activity.addEventListener('resume', function() { 
    Ti.API.log('*** Resume Event Called ***'); 
    var args = activity.getIntent().getData(); //this is also null 
    functions.handleFunction(args); 
}); 

當我試圖檢索數據的意圖,我得到空的結果。當我顯示意圖對象,我得到如下:

{"flags":0,"type":null,"data":null,"action":null}

爲什麼我沒有收到關於意圖的任何數據?難道我做錯了什麼?

編輯

我注意到,當我從可以打開一個特定的文件的應用程序列表中打開我的應用程序,就好像是之前關閉我的應用程序將啓動(即使先前已經打開) 。我試圖讓這個加載過程中的意圖我app.js文件,並讓我吃驚我的意圖的數據,這是如下:

content://com.android.email.attachmentprovider/1/2/RAW

如何打開呢?如何從該地址檢索文件,以便將其保存到我的應用程序目錄中?

EDIT 2

我試圖從那個地址是這樣的文件:

var tmpFile = Ti.Filesystem.getFile(String(currentActivity.getIntent().getData()));

但我得到的是一個文件對象,它是這樣的:

{ 
    "writable": false, 
    "symbolicLink": false, 
    "parent": null, 
    "readonly": true, 
    "nativePath": "content://com.android.email.attachmentprovider/1/2/RAW", 
    "executable": false, 
    "name": "api-eventos.txt", 
    "directoryListing": null, 
    "hidden": false, 
    "size": 0 
} 

它確實顯示原始文件的名稱,但大小爲0並且看起來不像它包含原始文件的任何信息,我嘗試讀取它,結果爲空。我如何從附件地址獲取文件?

回答

2

終於找到了解決這個問題的方法。內容返回一個URI,我可以用它來獲取文件,但我無法讀取它,但我可以將它複製到另一個文件中。新文件可以像其他任何File對象一樣被讀取和使用。這裏是我的代碼:

var currentActivity = Ti.Android.currentActivity; 
var passedData = currentActivity.getIntent().getData(); 
if(passedData !== null) 
{ 
    var tmpFile = Ti.Filesystem.getFile(String(passedData)); 
    var fileData = Ti.Filesystem.getFile(Ti.Filesystem.getTempDirectory() + tmpFile.name); 
    tmpFile.copy(fileData.nativePath); //the copy can be handled like any other normal file 
    Ti.App.Properties.setString('passedData', JSON.stringify(fileData)); // in my case I place it in a Ti.App.Property for later use 
} 

我希望這可以幫助其他人在同樣的情況我。這適用於2.1.3和3.0。

相關問題