這似乎是 Android https://developer.android.com/about/versions/11/privacy/package-visibility提到的包可見性問題
fun Activity.callPlayStoreIntent() {
val appPackageName = this.packageName
try {
val uri = Uri.parse("market://details?id=$appPackageName")
val intent = Intent(ACTION_VIEW, uri)
startActivity(intent)
} catch (exception: ActivityNotFoundException) {
try {
val uri = Uri.parse("https://play.google.com/store/apps/details?id=$appPackageName")
val intent = Intent(ACTION_VIEW, uri)
startActivity(intent)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
fun Context.callFromDialer(number: String) {
try {
val callIntent = Intent(Intent.ACTION_DIAL)
callIntent.data = Uri.parse("tel:$number")
if (callIntent.resolveActivity(packageManager) != null) {
startActivity(callIntent)
}
} catch (e: Exception) {
e.printStackTrace()
Toast.makeText(this, "No SIM Found", Toast.LENGTH_LONG).show()
}
}
fun Context.intentOpenMap(
latitude: Double,
longitude: Double,
label: String,
) {
try {
val uriBegin = "geo:$latitude,$longitude"
val query = "$latitude,$longitude($label)"
val encodedQuery = Uri.encode(query)
val uriString = "$uriBegin?q=$encodedQuery&z=20"
val uri = Uri.parse(uriString)
val intent = Intent(Intent.ACTION_VIEW, uri)
if (intent.resolveActivity(packageManager) != null) {
startActivity(intent)
}
} catch (ex: Exception) {
ex.printStackTrace()
Toast.makeText(this, "Unable to open Map", Toast.LENGTH_LONG).show()
}
}
uj5u.com熱心網友回復:
你的問題在于代碼行intent.resolveActivity(getPackageManager())。當你呼叫resolveActivity時,你會得到這樣的警告:
呼叫此方法時,請考慮在清單中添加宣告;有關詳細資訊,請參閱https://g.co/dev/packagevisibility
查看PackageManager下的檔案,你會看到這個注釋:
注意:如果您的應用面向 Android 11(API 級別 30)或更高版本,則此類中的每個方法都會回傳過濾后的應用串列。了解有關如何管理包可見性的更多資訊。
那是什么意思呢?
在 android 11 中,Google 添加了包可見性策略。應用程式現在可以更嚴格地控??制查看其他應用程式。您的應用程式將無法查看或訪問您的應用程式之外的應用程式。
你需要做什么?
您需要做的就是將以下代碼行添加到AndroidManifest.xml:
<manifest>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="geo" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="market" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
<intent>
<action android:name="android.intent.action.DIAL" />
</intent>
</queries>
</manifest>
更多資訊:
- Android 11 中的包可見性
- Android 上的包可見性過濾
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/341615.html
標籤:安卓 安卓意图 android-11
