你好Stackverflow的人!
我正在开发一个小型Android应用,其目的是读取.xlsx文件并以特定形式显示其数据(条形图/圆环图)。因为我没有时间学习Java和Android所需的一切我使用Cordova&离子框架来做到这一点。我对这些很新(对于AngularJS来说也很新)但是我以前用JavaScript编码,并且已经用NodeJS编码。
到目前为止,我已设法创建一个简单的视图,使用Highcharts library读取并显示我创建并直接存储在我的Javascript / Angular代码中的虚拟数据。但现在我想使用我得到的真实数据,但却遇到了两个主要问题:
如果您需要更多信息,我会更新此主题。
答案 0 :(得分:1)
<activity android:name="com.example.app.MainActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="file" /> <data android:mimeType="*/*" /> <data android:pathPattern=".*\\.xlsx" /> <data android:host="*" /> </intent-filter> </activity>
在您的主要活动中,在onCreate中添加处理程序:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Get the intent that started this activity
Intent intent = getIntent();
if (intent != null){
Uri data = intent.getData(); //get the uri of your xlsx
}
.
. // your cordova code
.
.
}
答案 1 :(得分:0)
我设法回答了我自己的问题,部分归功于Randyka Yudhistira的第一个问题。
首先,为了检测您的应用是否能够打开XLSX文件,您必须编辑其AndroidManifest.xml。在Ionic应用程序中,此文件位于:YOUR_APP/platforms/android/AndroidManifest.xml
。在<activity>
部分中添加以下intent-filter(再次感谢Randyka Yudhistira):
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="file" />
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.xlsx" />
<data android:host="*" />
</intent-filter>
其次,要打开并阅读XLSX文件并从中提取数据,您需要使用Bower轻松安装的ngCordova plugin,以及名为File的WebIntent Android plugin for Cordova和ngCorodva插件:
bower install ngCordova
cordova plugin add https://github.com/Initsogar/cordova-webintent.git
cordova plugin add org.apache.cordova.file
在HTML文件中引用ngCordova(在引用cordova lib之前):
<script src="lib/ngCordova/dist/ng-cordova.js"></script>
<script src="cordova.js"></script>
并将其作为角度模块中的Angular依赖项注入:
var yourApp = angular.module("yourApp", ['ionic', 'ngCordova']);
如果您需要使用给定文件“提供”应用,例如在我的应用中,您需要检索文件的网址。为此,请在您的Ionic控制器中添加服务$cordovaFile
和$ionicPlatform
,并使用以下webintent插件获取文件的URI:
yourApp.controller('yourAppController', function($scope, $ionicPlatform, $cordovaFile) {
$ionicPlatform.ready(function() {
if (window.plugins && window.plugins.webintent) { // checks if plugins are enabled and loaded
window.plugins.webintent.getUri(function (url) {
if(url) {
// use your file URL here
}
}
}
});
}
要打开文件并读取其数据,您需要将文件路径与文件名分开:
var path = url.slice(0, url.lastIndexOf('/') + 1);
var filename = url.substring(url.lastIndexOf('/') + 1);
最后,您可以使用cordova File plugin以四种不同的方式(如Text,DataURL,BinaryString,ArrayBuffer)读取文件中的数据,使用函数cordovaFile.readAs<theWayYouWant>(path, file)
(您得到一个{ {3}});例如,我需要将数据作为二进制字符串:
$cordovaFile.readAsBinaryString(path, filename)
.then(function(result) { // success
...
}, function() { // failure
alert('failed to open file');
});
希望这个答案可以帮助那些像我一样努力打开并阅读Ionic App中文件数据的人: - )