从 API 级别 22 开始,Android 原生支持双 SIM 卡设备。API 的中心是SubscriptionInfo.getSubscriptionId().
使用这些 ID,您可以检索SmsManager每个 SIM 卡的 s 以发送短信和彩信。您还可以识别通过哪张 SIM 卡接收短信SMS_RECEIVED_ACTION,等等。
但是,订阅 ID 的生命周期是多长?我可以将订阅 ID 存储在本地数据库中并指望它在以后仍然有效并指向同一张 SIM 卡吗?稍后,我的意思是在重新启动设备、取出 SIM 卡并将其重新插入之后,甚至在将设备恢复出厂设置之后。
我曾尝试使用 2 种方法来检索我的电话号码,但它们都不起作用。我用了:
我确实得到了网络名称、国家/地区 iso 和 IMEI,但是每当我尝试返回 Number 时,它什么都不返回。
我还为这些添加了所有必需的权限!我的清单看起来像:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
Run Code Online (Sandbox Code Playgroud)
使用TelephonyManager 的代码:
TelephonyManager phoneMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
phoneMgr.getLine1Number()
Run Code Online (Sandbox Code Playgroud)
使用SubscriptionManager 的代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
List<SubscriptionInfo> subscription = SubscriptionManager.from(getApplicationContext()).getActiveSubscriptionInfoList();
for (int i = 0; i < subscription.size(); i++) {
SubscriptionInfo info = subscription.get(i);
Log.e("TAG", "number " + info.getNumber());
Log.e("TAG", "network name : " + info.getCarrierName());
Log.e("TAG", "country iso " + info.getCountryIso());
}
}
Run Code Online (Sandbox Code Playgroud)
在两次尝试中,我都一无所获!
有没有其他方法可以获取电话号码,或者我做错了什么?
java android phone-number telephonymanager android-subscriptionmanager
以前我们用来获取SubscriptionManagerusing 的实例
SubscriptionManager subscriptionManager=SubscriptionManager.from(this);
Run Code Online (Sandbox Code Playgroud)
但SubscriptionManager.from(context)在 API 28 中已弃用,获取SubscriptionManager实例的新方法是什么?
我已按照以下步骤操作:
但是当我发送测试通知时,我收到此错误:
在主题项目/project_id/topics/topic_name 上发布测试时发生错误。确保正确创建和配置主题,并设置所需的权限。请参阅实时开发人员通知的发布/订阅指南以了解更多信息。
但
任何帮助表示赞赏。
android google-cloud-pubsub google-developers-console google-play-console android-subscriptionmanager