9 回答
对于我的用例,我想要一些东西来区分native
和browser
平台。也就是说,我的应用程序是在浏览器中运行还是在本机移动设备中运行。这是我想出的服务:
import { Injectable } from '@angular/core';
import {Platform} from '@ionic/angular';
type CurrentPlatform = 'browser' | 'native';
@Injectable({
providedIn: 'root'
})
export class CurrentPlatformService {
private _currentPlatform: CurrentPlatform;
constructor(private platform: Platform) {
this.setCurrentPlatform();
}
get currentPlatform() {
return this._currentPlatform;
}
isNative() {
return this._currentPlatform === 'native';
}
isBrowser() {
return this._currentPlatform === 'browser';
}
private setCurrentPlatform() {
// Are we on mobile platform? Yes if platform is ios or android, but not desktop or mobileweb, no otherwise
if (
this.platform.is('ios')
|| this.platform.is('android')
&& !( this.platform.is('desktop') || this.platform.is('mobileweb') ) ) {
this._currentPlatform = 'mobile';
} else {
this._currentPlatform = 'browser';
}
}
}
目前 Ionic 4 支持平台检测。以下代码适用于我。
import { Platform } from '@ionic/angular';
...
constructor(private platform: Platform) {}
...
ngOnInit() {
this.platform.ready().then(() => {
if (this.platform.is('android')) {
console.log('android');
} else if (this.platform.is('ios')) {
console.log('ios');
} else {
//fallback to browser APIs or
console.log('The platform is not supported');
}
}}
以下链接可能对您有所帮助:
https ://forum.ionicframework.com/t/how-to-determine-if-browser-or-app/89149/16
或者您可以使用以下方法:
public isDesktop() {
let platforms = this.plt.platforms();
if(platforms[0] == "core" || platforms[0] == "mobileweb") {
return true;
} else {
return false;
}
}
Ionic-4 平台特定值
goto- node_modules@ionic\angular\dist\providers\platform.d.ts
Platform Name | Description |
* | android | on a device running Android. |
* | cordova | on a device running Cordova. |
* | ios | on a device running iOS. |
* | ipad | on an iPad device. |
* | iphone | on an iPhone device. |
* | phablet | on a phablet device. |
* | tablet | on a tablet device. |
* | electron | in Electron on a desktop device. |
* | pwa | as a PWA app. |
* | mobile | on a mobile device. |
* | desktop | on a desktop device. |
* | hybrid | is a cordova or capacitor app. |
如果有人还在 ionic4/cordova 上为此苦苦挣扎,我使用
import {Device} from '@ionic-native/device/ngx'
只需将其添加到您的 app.modules 中,然后在任何需要查找的地方运行 this.device.platform
console.log(this.platform.platforms());
console.log(this.device.platform);
这是:
Running on web (desktop and mobile)
["android", "phablet", "cordova", "mobile", "hybrid"]
browser
Running android local (apk)
["android", "cordova", "desktop", "hybrid"]
Android
现在我可以正确使用浏览器或移动插件,在我的情况下是图像加载和裁剪。
完整的解释可以在https://www.damirscorner.com/blog/posts/20171124-DetectingWhereIonicAppIsRunning.html找到
您使用的逻辑是正确的逻辑。
问题出在 ionic 4 上,它返回了错误的值。
错误已发布在 ionic repo 上: https ://github.com/ionic-team/ionic/issues/15165
与作为 ['android'] 的平台相关的另一个问题也是一个错误,这里也有报道:https ://github.com/ionic-team/ionic/issues/15051
离子 4 / 电容器
我写了一个这样的服务:
检测-platform.service.ts
import { Injectable } from '@angular/core';
import { Platform } from '@ionic/angular';
import { find } from 'lodash';
@Injectable({
providedIn: 'root'
})
export class DetectPlatformService {
isDevice: boolean = false;
constructor(
private platform: Platform, ) { }
setPlatform(): void {
const platforms: string[] = this.platform.platforms();
const platform: string = find(platforms, (p: string) => {
return p === 'capacitor';
});
this.isDevice = platform ? true : false;
}
}
注意:因为我使用Ionic 4/Capacitor
它会给出true
if 它在device
else false
。
这样做:首先导入
import {Platform } from 'ionic-angular';
// >> Then init the platform like this:
private platform: Platform,
if(this.platform.is('ios')==true){
//ios PlatForm
}else{
//Android PlatForm
}
要检测 Web 平台,您应该使用Bowser。我在 ionic 4 中使用它来检测浏览器平台,即它是 safari 还是 chrome。
第 1 步:您需要在项目中安装 bowser
npm install bowser@2.7.0 --save-exact
第 2 步:然后您需要将它导入到要使用它的 .ts 页面中。假设home.ts
import Bowser from "bowser";
第 3 步:然后您需要在home.ts中的函数内编写登录以检查浏览器平台
checkBrowserPlatform() {
const browser = Bowser.getParser(window.navigator.userAgent);
const browserName = browser.getBrowserName();
console.log(browserName);
}
通过调用checkBrowserPlatform()可以知道当前浏览器的名称。