權(quán)限概述

權(quán)限的目的是保護(hù)Android用戶的隱私。
Android應(yīng)用訪問敏感的用戶數(shù)據(jù)(如聯(lián)系人和短信)以及某些系統(tǒng)功能(如相機(jī)和互聯(lián)網(wǎng))必須請(qǐng)求權(quán)限。 根據(jù)功能的不同,系統(tǒng)可能會(huì)自動(dòng)授予權(quán)限,也可能會(huì)提示用戶批準(zhǔn)請(qǐng)求。

此頁(yè)面概述了Android權(quán)限的工作方式,包括:如何向用戶呈現(xiàn)權(quán)限,安裝時(shí)和運(yùn)行時(shí)權(quán)限請(qǐng)求之間的區(qū)別,權(quán)限的實(shí)施方式以及權(quán)限組的類型。 如果您只想獲得使用應(yīng)用權(quán)限的操作指南,請(qǐng)參閱請(qǐng)求應(yīng)用權(quán)限。

一、許可批準(zhǔn)

應(yīng)用必須通過在應(yīng)用清單中包含<uses-permission>標(biāo)記來公布所需的權(quán)限。 例如,需要發(fā)送SMS消息的應(yīng)用程序?qū)⒃谇鍐沃邪韵滦校?/p>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.snazzyapp">
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <application ...>
        ...
    </application>
</manifest>

如果您的應(yīng)用在其清單中列出了正常權(quán)限(即,不會(huì)對(duì)用戶的隱私或設(shè)備操作造成太大風(fēng)險(xiǎn)的權(quán)限),系統(tǒng)會(huì)自動(dòng)將這些權(quán)限授予您的應(yīng)用。

如果您的應(yīng)用在其清單中列出了危險(xiǎn)權(quán)限(即可能會(huì)影響用戶隱私或設(shè)備正常運(yùn)行的權(quán)限),例如上面的SEND_SMS權(quán)限,則用戶必須明確同意授予這些權(quán)限。

有關(guān)正常和危險(xiǎn)權(quán)限的詳細(xì)信息,請(qǐng)參閱保護(hù)級(jí)別。

1、請(qǐng)求提示危險(xiǎn)權(quán)限

只有危險(xiǎn)權(quán)限才需要用戶同意。 Android要求用戶授予危險(xiǎn)權(quán)限的方式取決于用戶設(shè)備上運(yùn)行的Android版本以及應(yīng)用所針對(duì)的系統(tǒng)版本。

運(yùn)行時(shí)請(qǐng)求(Android 6.0及更高版本)
如果設(shè)備運(yùn)行的是Android 6.0(API級(jí)別23)或更高版本,并且應(yīng)用程序的targetSdkVersion為23或更高,則在安裝時(shí)不會(huì)通知用戶任何應(yīng)用程序權(quán)限,您的應(yīng)用必須要求用戶在運(yùn)行時(shí)授予危險(xiǎn)權(quán)限。 當(dāng)您的應(yīng)用請(qǐng)求權(quán)限時(shí),用戶會(huì)看到一個(gè)系統(tǒng)對(duì)話框(如圖1左側(cè)所示),告訴用戶您的應(yīng)用嘗試訪問哪個(gè)權(quán)限組。 該對(duì)話框包括拒絕和允許按鈕。

如果用戶拒絕權(quán)限請(qǐng)求,則下次您的應(yīng)用請(qǐng)求權(quán)限時(shí),該對(duì)話框包含一個(gè)復(fù)選框,選中該復(fù)選框后,表示不希望再次提示用戶獲得權(quán)限(參見圖2,右側(cè))。


image

圖1.初始權(quán)限對(duì)話框(左)和次要權(quán)限請(qǐng)求以及關(guān)閉進(jìn)一步請(qǐng)求的選項(xiàng)(右)

如果用戶選中“永不再詢問”框并點(diǎn)擊“拒絕”,則系統(tǒng)不再提示用戶以后是否嘗試請(qǐng)求相同的權(quán)限。

即使用戶授予您的應(yīng)用程序所請(qǐng)求的權(quán)限,您也不能總是依賴它。 用戶還可以選擇在系統(tǒng)設(shè)置中逐個(gè)啟用和禁用權(quán)限。 您應(yīng)該始終在運(yùn)行時(shí)檢查并請(qǐng)求權(quán)限以防止運(yùn)行時(shí)錯(cuò)誤(SecurityException)。

有關(guān)如何處理運(yùn)行時(shí)權(quán)限請(qǐng)求的詳細(xì)信息,請(qǐng)參閱請(qǐng)求應(yīng)用程序權(quán)限。

安裝時(shí)請(qǐng)求(Android 5.1.1及更低版本)
如果設(shè)備運(yùn)行Android 5.1.1(API級(jí)別22)或更低版本,或者應(yīng)用程序的targetSdkVersion在任何版本的Android上運(yùn)行時(shí)為22或更低,系統(tǒng)會(huì)自動(dòng)要求用戶在安裝時(shí)為您的應(yīng)用授予所有危險(xiǎn)權(quán)限(見圖2)。

image

圖2.安裝時(shí)權(quán)限對(duì)話框

如果用戶單擊“接受”,則授予應(yīng)用程序請(qǐng)求的所有權(quán)限。 如果用戶拒絕權(quán)限請(qǐng)求,系統(tǒng)將取消應(yīng)用程序的安裝。

如果應(yīng)用更新包含對(duì)其他權(quán)限的需求,則會(huì)在更新應(yīng)用之前提示用戶接受這些新權(quán)限。

有關(guān)請(qǐng)求權(quán)限的建議,請(qǐng)參閱應(yīng)用程序權(quán)限最佳實(shí)踐。

要了解如何檢查和請(qǐng)求用戶的權(quán)限,請(qǐng)參閱請(qǐng)求應(yīng)用程序權(quán)限。

二、可選硬件功能的權(quán)限

訪問某些硬件功能(如藍(lán)牙或相機(jī))需要應(yīng)用程序權(quán)限。 但是,并非所有Android設(shè)備都具有這些硬件功能。 因此,如果您的應(yīng)用請(qǐng)求CAMERA權(quán)限,那么您還需要在清單中包含<uses-feature>標(biāo)記來聲明是否確實(shí)需要此功能。 例如:

<uses-feature android:name="android.hardware.camera" android:required="false" />

如果您為該功能聲明了android:required =“false”,那么Google Play允許您的應(yīng)用安裝在沒有該功能的設(shè)備上。 然后,您必須通過調(diào)用PackageManager.hasSystemFeature()檢查當(dāng)前設(shè)備是否在運(yùn)行時(shí)具有該功能,并在該功能不可用時(shí)禁用該功能。

如果您未提供<uses-feature>標(biāo)記,那么當(dāng)Google Play看到您的應(yīng)用請(qǐng)求相應(yīng)的權(quán)限時(shí),它會(huì)認(rèn)為您的應(yīng)用需要此功能。 因此,它會(huì)從沒有該功能的設(shè)備中過濾您的應(yīng)用,就像您在<uses-feature>標(biāo)記中聲明了android:required =“true”一樣。

有關(guān)詳細(xì)信息,請(qǐng)參閱Google Play和基于功能的過濾。

三、許可執(zhí)行

權(quán)限不僅適用于請(qǐng)求系統(tǒng)功能。 應(yīng)用程序提供的服務(wù)可以強(qiáng)制執(zhí)行自定義權(quán)限,以限制誰可以使用它們。 有關(guān)聲明自定義權(quán)限的詳細(xì)信息,請(qǐng)參閱定義自定義應(yīng)用程序權(quán)限。

1、活動(dòng)權(quán)限執(zhí)行

使用android:permission屬性對(duì)清單中的<activity>標(biāo)記應(yīng)用的權(quán)限限制了誰可以啟動(dòng)該Activity。 在Context.startActivity()Activity.startActivityForResult()期間檢查權(quán)限。 如果調(diào)用者沒有所需的權(quán)限,則從調(diào)用中拋出SecurityException

2、服務(wù)權(quán)限執(zhí)行

使用android:permission屬性對(duì)清單中的<service>標(biāo)記應(yīng)用的權(quán)限限制誰可以啟動(dòng)或綁定到關(guān)聯(lián)的服務(wù)。 在Context.startService(),Context.stopService()Context.bindService()期間檢查權(quán)限。 如果調(diào)用者沒有所需的權(quán)限,則從調(diào)用中拋出SecurityException。

3、廣播許可執(zhí)行

使用android:permission屬性應(yīng)用于<receiver>標(biāo)簽的權(quán)限限制了誰可以向關(guān)聯(lián)的BroadcastReceiver發(fā)送廣播。 在Context.sendBroadcast()返回后檢查權(quán)限,因?yàn)橄到y(tǒng)嘗試將提交的廣播傳遞給給定的接收者。 因此,權(quán)限失敗不會(huì)導(dǎo)致異常被拋回調(diào)用者; 它只是沒有提供意圖。

以同樣的方式,可以向Context.registerReceiver()提供權(quán)限,以控制誰可以向編程注冊(cè)的接收者廣播。 另一方面,在調(diào)用Context.sendBroadcast()以限制允許哪些廣播接收器接收廣播時(shí),可以提供權(quán)限。

請(qǐng)注意,接收方和廣播公司都需要許可。 發(fā)生這種情況時(shí),必須通過兩個(gè)權(quán)限檢查才能將意圖傳遞給關(guān)聯(lián)目標(biāo)。 有關(guān)更多信息,請(qǐng)參閱限制具有權(quán)限的廣播。

4、Content Provider權(quán)限實(shí)施

使用android:permission屬性應(yīng)用于<provider>標(biāo)記的權(quán)限限制了誰可以訪問ContentProvider中的數(shù)據(jù)。 (內(nèi)容提供商有一個(gè)重要的額外安全設(shè)施,稱為URI權(quán)限,這將在下面描述。)與其他組件不同,您可以設(shè)置兩個(gè)單獨(dú)的權(quán)限屬性:android:readPermission限制誰可以從提供程序讀取,以及android: writePermission限制誰可以寫入它。請(qǐng)注意,如果提供程序受讀取和寫入權(quán)限保護(hù),則僅保留寫入權(quán)限并不意味著您可以從提供程序讀取。

首次檢索提供程序時(shí)將檢查權(quán)限(如果您沒有任何權(quán)限,則拋出SecurityException),以及在提供程序上執(zhí)行操作時(shí)。使用ContentResolver.query()需要保持讀取權(quán)限;使用ContentResolver.insert(),ContentResolver.update()ContentResolver.delete()需要寫入權(quán)限。在所有這些情況下,未保留所需的權(quán)限會(huì)導(dǎo)致從調(diào)用中拋出SecurityException。

5、URI權(quán)限

當(dāng)與內(nèi)容提供商一起使用時(shí),到目前為止描述的標(biāo)準(zhǔn)許可系統(tǒng)通常是不夠的。內(nèi)容提供商可能希望使用讀取和寫入權(quán)限來保護(hù)自己,而其直接客戶端還需要將特定URI傳遞給其他應(yīng)用程序以供其操作。

一個(gè)典型的例子是電子郵件應(yīng)用程序中的附件。對(duì)電子郵件的訪問應(yīng)受權(quán)限保護(hù),因?yàn)檫@是敏感的用戶數(shù)據(jù)。但是,如果圖像附件的URI被提供給圖像查看器,則該圖像查看器不再具有打開附件的權(quán)限,因?yàn)樗鼪]有理由擁有訪問所有電子郵件的權(quán)限。

此問題的解決方案是per-URI權(quán)限:?jiǎn)?dòng)活動(dòng)或?qū)⒔Y(jié)果返回給活動(dòng)時(shí),調(diào)用者可以設(shè)置Intent.FLAG_GRANT_READ_URI_PERMISSION和/或Intent.FLAG_GRANT_WRITE_URI_PERMISSION。這授予接收活動(dòng)權(quán)限訪問意圖中的特定數(shù)據(jù)URI,而不管它是否具有訪問對(duì)應(yīng)于意圖的內(nèi)容提供者中的數(shù)據(jù)的任何許可。

此機(jī)制允許一種通用的功能樣式模型,其中用戶交互(例如打開附件或從列表中選擇聯(lián)系人)驅(qū)動(dòng)臨時(shí)授予細(xì)粒度權(quán)限。這可以是將應(yīng)用程序所需的權(quán)限僅限于與其行為直接相關(guān)的權(quán)限的關(guān)鍵工具。

要構(gòu)建最安全的實(shí)現(xiàn),使其他應(yīng)用程序?qū)δ趛or應(yīng)用程序中的操作負(fù)責(zé),您應(yīng)該以這種方式使用細(xì)粒度權(quán)限,并使用android:grantUriPermissions屬性或<grant-uri-permissions>標(biāo)記聲明您的應(yīng)用程序?qū)λ闹С帧?/p>

可以在Context.grantUriPermission()Context.revokeUriPermission()Context.checkUriPermission()方法中找到更多信息。

6、其他許可執(zhí)行

任何對(duì)服務(wù)的調(diào)用都可以強(qiáng)制執(zhí)行任意細(xì)粒度的權(quán)限。 這是通過Context.checkCallingPermission()方法完成的。 使用所需的權(quán)限字符串進(jìn)行調(diào)用,并返回一個(gè)整數(shù),指示是否已將該權(quán)限授予當(dāng)前調(diào)用進(jìn)程。 請(qǐng)注意,這只能在您執(zhí)行來自其他進(jìn)程的調(diào)用時(shí)使用,通常是通過從服務(wù)發(fā)布的IDL接口或以其他方式執(zhí)行到另一個(gè)進(jìn)程。

還有許多其他有用的方法可以檢查權(quán)限。 如果您具有另一個(gè)進(jìn)程的進(jìn)程ID(PID),則可以使用Context.checkPermission()方法檢查針對(duì)該P(yáng)ID的權(quán)限。 如果您具有其他應(yīng)用程序的程序包名稱,則可以使用PackageManager.checkPermission()方法來確定該特定程序包是否已被授予特定權(quán)限。

三、自動(dòng)權(quán)限調(diào)整

隨著時(shí)間的推移,可能會(huì)向平臺(tái)添加新的限制,以便為了使用某些API,您的應(yīng)用必須請(qǐng)求以前不需要的權(quán)限。 由于現(xiàn)有應(yīng)用程序假定可以免費(fèi)訪問這些API,因此Android可以將新的權(quán)限請(qǐng)求應(yīng)用于應(yīng)用程序的清單,以避免破壞新平臺(tái)版本上的應(yīng)用程序(從而“為您的應(yīng)用程序”授予“權(quán)限”)。 Android根據(jù)為 targetSdkVersion屬性提供的值,決定應(yīng)用是否可能需要該權(quán)限。 如果該值低于添加權(quán)限的版本,則Android會(huì)添加權(quán)限。

例如,從API級(jí)別19開始強(qiáng)制執(zhí)行READ_EXTERNAL_STORAGE權(quán)限,以限制對(duì)共享存儲(chǔ)空間的訪問。 如果您的targetSdkVersion為18或更低,則此權(quán)限會(huì)在較新版本的Android上添加到您的應(yīng)用中。

警告:如果您的應(yīng)用自動(dòng)添加了權(quán)限,則Google Play上的應(yīng)用列表會(huì)列出這些附加權(quán)限,即使您的應(yīng)用可能實(shí)際上并不需要這些權(quán)限。 要避免這種情況并刪除您不需要的默認(rèn)權(quán)限,請(qǐng)始終將targetSdkVersion更新為盡可能高。 您可以在Build.VERSION_CODES文檔中查看每個(gè)版本添加了哪些權(quán)限。

四、保護(hù)級(jí)別

權(quán)限分為幾個(gè)保護(hù)級(jí)別。 保護(hù)級(jí)別會(huì)影響是否需要運(yùn)行時(shí)權(quán)限請(qǐng)求。
有三種保護(hù)級(jí)別會(huì)影響第三方應(yīng)用程序:正常,簽名和危險(xiǎn)權(quán)限。
普通權(quán)限涵蓋了應(yīng)用程序需要訪問應(yīng)用程序沙箱外部數(shù)據(jù)或資源的區(qū)域,但用戶隱私或其他應(yīng)用程序操作的風(fēng)險(xiǎn)非常小。 例如,設(shè)置時(shí)區(qū)的權(quán)限是正常權(quán)限。

1、正常權(quán)限

如果應(yīng)用程序在其清單中聲明它需要正常權(quán)限,則系統(tǒng)會(huì)在安裝時(shí)自動(dòng)授予應(yīng)用程序該權(quán)限。 系統(tǒng)不會(huì)提示用戶授予正常權(quán)限,用戶也無法撤消這些權(quán)限。
從Android 8.1(API級(jí)別27)開始,以下權(quán)限被歸類為PROTECTION_NORMAL:(參考Android官方文檔,這里不做詳細(xì)描述)。

2、簽名權(quán)限

系統(tǒng)會(huì)在安裝時(shí)授予這些應(yīng)用程序權(quán)限,但僅限于嘗試使用權(quán)限的應(yīng)用程序使用與定義權(quán)限的應(yīng)用程序相同的證書進(jìn)行簽名時(shí)。
注意:某些簽名權(quán)限不適用于第三方應(yīng)用程序。

從Android 8.1(API級(jí)別27)開始,第三方應(yīng)用程序可以使用的以下權(quán)限歸類為PROTECTION_SIGNATURE:(參考Android官方文檔,這里不做詳細(xì)描述)。

3、危險(xiǎn)的權(quán)限

危險(xiǎn)權(quán)限涵蓋應(yīng)用程序需要涉及用戶私人信息的數(shù)據(jù)或資源的區(qū)域,或者可能會(huì)影響用戶存儲(chǔ)的數(shù)據(jù)或其他應(yīng)用程序的操作。 例如,讀取用戶聯(lián)系人的權(quán)限是一種危險(xiǎn)的權(quán)限。 如果應(yīng)用聲明它需要危險(xiǎn)權(quán)限,則用戶必須明確授予該應(yīng)用的權(quán)限。 在用戶批準(zhǔn)該權(quán)限之前,您的應(yīng)用無法提供依賴該權(quán)限的功能。

要使用危險(xiǎn)權(quán)限,您的應(yīng)用必須提示用戶在運(yùn)行時(shí)授予權(quán)限。 有關(guān)如何提示用戶的更多詳細(xì)信息,請(qǐng)參閱危險(xiǎn)權(quán)限的請(qǐng)求提示。

有關(guān)危險(xiǎn)權(quán)限的列表,請(qǐng)參閱下面的表1。

4、特殊權(quán)限

有一些權(quán)限不像正常和危險(xiǎn)的權(quán)限。 SYSTEM_ALERT_WINDOWWRITE_SETTINGS特別敏感,因此大多數(shù)應(yīng)用程序不應(yīng)使用它們。 如果應(yīng)用程序需要其中一個(gè)權(quán)限,則必須在清單中聲明權(quán)限,并發(fā)送請(qǐng)求用戶授權(quán)的意圖。 系統(tǒng)通過向用戶顯示詳細(xì)的管理屏幕來響應(yīng)意圖。

有關(guān)如何請(qǐng)求這些權(quán)限的詳細(xì)信息,請(qǐng)參閱SYSTEM_ALERT_WINDOWWRITE_SETTINGS參考條目。

可以在Manifest.permission中找到Android系統(tǒng)提供的所有權(quán)限。

五、許可組

權(quán)限分組為與設(shè)備功能或功能相關(guān)的組。 在此系統(tǒng)下,權(quán)限請(qǐng)求在組級(jí)別處理,單個(gè)權(quán)限組對(duì)應(yīng)于應(yīng)用程序清單中的多個(gè)權(quán)限聲明。 例如,SMS組包括READ_SMS和RECEIVE_SMS聲明。 以這種方式對(duì)權(quán)限進(jìn)行分組使用戶能夠做出更有意義和更明智的選擇,而不會(huì)被復(fù)雜和技術(shù)許可請(qǐng)求所淹沒。


image

所有危險(xiǎn)的Android權(quán)限都屬于權(quán)限組。 無論保護(hù)級(jí)別如何,任何權(quán)限都可以屬于權(quán)限組。 但是,如果權(quán)限是危險(xiǎn)的,則權(quán)限組僅影響用戶體驗(yàn)。
如果設(shè)備運(yùn)行的是Android 6.0(API級(jí)別23)且應(yīng)用的targetSdkVersion為23或更高,則當(dāng)您的應(yīng)用請(qǐng)求危險(xiǎn)權(quán)限時(shí),以下系統(tǒng)行為適用:

  • 如果應(yīng)用程序當(dāng)前在權(quán)限組中沒有任何權(quán)限,系統(tǒng)會(huì)向用戶顯示描述應(yīng)用程序要訪問的權(quán)限組的權(quán)限請(qǐng)求對(duì)話框。 該對(duì)話框未描述該組中的特定權(quán)限。 例如,如果某個(gè)應(yīng)用請(qǐng)求READ_CONTACTS權(quán)限,系統(tǒng)對(duì)話框只會(huì)說該應(yīng)用需要訪問該設(shè)備的聯(lián)系人。 如果用戶授予批準(zhǔn),系統(tǒng)將為應(yīng)用程序提供其請(qǐng)求的權(quán)限。
  • (2)如果應(yīng)用程序已在同一權(quán)限組中被授予其他危險(xiǎn)權(quán)限,則系統(tǒng)會(huì)立即授予權(quán)限,而不與用戶進(jìn)行任何交互。 例如,如果應(yīng)用程序先前已請(qǐng)求并已獲得READ_CONTACTS權(quán)限,然后它請(qǐng)求WRITE_CONTACTS,則系統(tǒng)會(huì)立即授予該權(quán)限,而不向用戶顯示權(quán)限對(duì)話框。

警告:未來版本的Android SDK可能會(huì)將特定權(quán)限從一個(gè)組移動(dòng)到另一個(gè)組。 因此,請(qǐng)勿將應(yīng)用程序的邏輯基于這些權(quán)限組的結(jié)構(gòu)。
例如,READ_CONTACTS與Android 8.1(API級(jí)別27)中的WRITE_CONTACTS屬于同一權(quán)限組。 如果您的應(yīng)用請(qǐng)求READ_CONTACTS權(quán)限,然后請(qǐng)求WRITE_CONTACTS權(quán)限,請(qǐng)不要假設(shè)系統(tǒng)可以自動(dòng)授予WRITE_CONTACTS權(quán)限。

如果設(shè)備運(yùn)行的是Android 5.1(API級(jí)別22)或更低版本,或者應(yīng)用程序的targetSdkVersion為22或更低,系統(tǒng)會(huì)要求用戶在安裝時(shí)授予權(quán)限。 系統(tǒng)再次告訴用戶應(yīng)用程序需要哪些權(quán)限組,而不是單個(gè)權(quán)限。 例如,當(dāng)應(yīng)用程序請(qǐng)求READ_CONTACTS時(shí),安裝對(duì)話框?qū)⒘谐觥奥?lián)系人”組。 當(dāng)用戶接受時(shí),只有READ_CONTACTS權(quán)限被授予應(yīng)用程序。

注意:即使用戶已在同一組中授予了其他權(quán)限,您的應(yīng)用仍需要明確請(qǐng)求其所需的每個(gè)權(quán)限。 此外,將權(quán)限分組到組中可能會(huì)在將來的Android版本中發(fā)生變化。 您的代碼不應(yīng)具有依賴于同一組中的一組特定權(quán)限的邏輯。

六、查看應(yīng)用的權(quán)限

您可以使用“設(shè)置”應(yīng)用程序和shell命令adb shell pm list permissions查看當(dāng)前在系統(tǒng)中定義的所有權(quán)限。 要使用“設(shè)置”應(yīng)用,請(qǐng)轉(zhuǎn)到“設(shè)置”>“應(yīng)用”。 選擇一個(gè)應(yīng)用并向下滾動(dòng)以查看該應(yīng)用使用的權(quán)限。 對(duì)于開發(fā)人員,adb'-s'選項(xiàng)以類似于用戶看到的形式顯示權(quán)限:

$ adb shell pm list permissions -s
All Permissions:

Network communication: view Wi-Fi state, create Bluetooth connections, full
internet access, view network state

Your location: access extra location provider commands, fine (GPS) location,
mock location sources for testing, coarse (network-based) location

Services that cost you money: send SMS messages, directly call phone numbers
...

在模擬器或測(cè)試設(shè)備上安裝應(yīng)用程序時(shí),您還可以使用adb -g選項(xiàng)自動(dòng)授予所有權(quán)限:

$ adb shell install -g MyApp.apk
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容