我有一个扩展功能,用于为我的活动打开一个意图:
fun Activity.openIntent(action: String?, type: String?, uri: Uri?) {
Intent()
.apply {
action?.let { this.action = it }
uri?.let { this.data = it }
type?.let { this.type = it }
}
.also { intent ->
packageManager?.let {
if (intent.resolveActivity(it) != null)
startActivity(intent)
else
showToast(R.string.application_not_found)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的targetSdkVersion是30。它给了我一个警告intent.resolveActivity(it):
调用此方法时,请考虑向清单添加查询声明。
那么我应该怎么做才能解决这个警告呢?
我想在Android应用程序的PreferenceScreen中集成"通过比特币捐赠"按钮.
有一些适用于Android的比特币客户端,比特币维基定义了一个应该用于BTC支付的URI方案.
我试过以下代码
findPreference(getString(R.string.preference_donateBitcoin)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
String url = getString(R.string.pref_donateBitcoin_uri);
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
withou在手机上安装了BTC.我尝试使用以下URI启动intent:bitcoin:19iSEgNkJnEUtNDuuTkkZrU44PVKYMVfhz?amount=1期望Android告诉我没有安装处理程序.
相反,我得到了一个 ActivityNotFoundException
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW dat=bitcoin:19iSEgNkJnEUtNDuuTkkZrU44PVKYMVfhz?amount=1 }
Run Code Online (Sandbox Code Playgroud)
我的问题是正确处理(读取"最佳实践")设备未知的URI方案.
[编辑]:问题是错误的,因为我搞砸了我的手机备份,并假设比特币钱包应用程序安装时没有.
我正在按照本教程,我在模拟器上测试它,当我运行这个项目并单击它崩溃的按钮并给我以下错误
07-27 06:33:30.324: E/AndroidRuntime(10972): FATAL EXCEPTION: main
07-27 06:33:30.324: E/AndroidRuntime(10972): android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.GET_CONTENT typ=file/ * }
07-27 06:33:30.324: E/AndroidRuntime(10972): at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1408)
07-27 06:33:30.324: E/AndroidRuntime(10972): at android.app.Instrumentation.execStartActivity(Instrumentation.java:1378)
07-27 06:33:30.324: E/AndroidRuntime(10972): at android.app.Activity.startActivityForResult(Activity.java:2817)
07-27 06:33:30.324: E/AndroidRuntime(10972): at com.exercise.AndroidPick_a_File.AndroidPick_a_File$1.onClick(AndroidPick_a_File.java:35)
07-27 06:33:30.324: E/AndroidRuntime(10972): at android.view.View.performClick(View.java:2408)
07-27 06:33:30.324: E/AndroidRuntime(10972): at android.view.View$PerformClick.run(View.java:8816)
07-27 06:33:30.324: E/AndroidRuntime(10972): at android.os.Handler.handleCallback(Handler.java:587)
07-27 06:33:30.324: E/AndroidRuntime(10972): at android.os.Handler.dispatchMessage(Handler.java:92)
07-27 06:33:30.324: E/AndroidRuntime(10972): at android.os.Looper.loop(Looper.java:123)
07-27 06:33:30.324: E/AndroidRuntime(10972): at android.app.ActivityThread.main(ActivityThread.java:4627)
07-27 06:33:30.324: E/AndroidRuntime(10972): at java.lang.reflect.Method.invokeNative(Native Method) …Run Code Online (Sandbox Code Playgroud)