我正在尝试为我的应用程序创建一个帐户,在该帐户中我可以与我的帐户建立联系,例如facebook,viber,whatsapp等。我也希望我的帐户在设置的“帐户”部分中可见。有任何想法吗?我已经在Google上搜索了很多,但是找不到正确的答案从哪里开始。请帮忙。我试图创建一个帐户如下。这导致我出错。
Account account = new Account("Title", "com.package.nom");
String password = "password";
AccountManager accountManager =
(AccountManager) MainPanel.this.getSystemService(
ACCOUNT_SERVICE);
accountManager.addAccountExplicitly(account, password, null);
您需要设置多个组件才能以编程方式创建一个帐户。你需要:
验证者是一个对象,它将在有权管理它的帐户类型和授权者(即linux用户)之间进行映射。
声明身份验证器 是在xml中完成的:
res/xml/authenticator.xml
具有以下内容:
<?xml version="1.0" encoding="utf-8"?>
<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
android:accountType="com.company.demo.account.DEMOACCOUNT"
android:icon="@drawable/ic_launcher"
android:smallIcon="@drawable/ic_launcher"
android:label="@string/my_custom_account"/>
请注意accountType:创建帐户时,必须在代码中重用它。图标和标签将由“设置”应用使用,以显示该类型的帐户。
实施AccountAuthenticator
您必须扩展AbstractAccountAuthenticator
才能做到这一点。第三方应用程序将使用它来访问帐户数据。
以下示例不允许任何对第三方应用程序的访问,因此每种方法的实现都很简单。
public class CustomAuthenticator extends AbstractAccountAuthenticator {
public CustomAuthenticator(Context context) {
super(context);
}
@Override
public Bundle addAccount(AccountAuthenticatorResponse accountAuthenticatorResponse, String s, String s2, String[] strings, Bundle bundle) throws NetworkErrorException {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public Bundle editProperties(AccountAuthenticatorResponse accountAuthenticatorResponse, String s) {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public Bundle confirmCredentials(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, Bundle bundle) throws NetworkErrorException {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public Bundle getAuthToken(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, String s, Bundle bundle) throws NetworkErrorException {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public String getAuthTokenLabel(String s) {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public Bundle updateCredentials(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, String s, Bundle bundle) throws NetworkErrorException {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
@Override
public Bundle hasFeatures(AccountAuthenticatorResponse accountAuthenticatorResponse, Account account, String[] strings) throws NetworkErrorException {
return null; //To change body of implemented methods use File | Settings | File Templates.
}
}
创建一个服务来操纵该类型的帐户:
public class AuthenticatorService extends Service {
@Override
public IBinder onBind(Intent intent) {
CustomAuthenticator authenticator = new CustomAuthenticator(this);
return authenticator.getIBinder();
}
}
在清单中声明服务 :
<service android:name="com.company.demo.account.AuthenticatorService" android:exported="false">
<intent-filter>
<action android:name="android.accounts.AccountAuthenticator"/>
</intent-filter>
<meta-data
android:name="android.accounts.AccountAuthenticator"
android:resource="@xml/authenticator"/>
</service>
这里,引用声明身份验证器的xml资源的过滤器和元数据是关键点。
在清单中,请确保声明以下权限
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
(并非本文中提供的示例代码所需的全部,但您可能还会有一些有关帐户管理的代码,最后它们将非常有用)
现在一切就绪,您可以使用以下代码创建一个帐户。注意boolean
通过返回addAccountExplicitly
通知您的成功或失败。
AccountManager accountManager = AccountManager.get(this); //this is Activity
Account account = new Account("MyAccount","com.company.demo.account.DEMOACCOUNT");
boolean success = accountManager.addAccountExplicitly(account,"password",null);
if(success){
Log.d(TAG,"Account created");
}else{
Log.d(TAG,"Account creation failed. Look at previous logs to investigate");
}
不要在外部存储上安装您的应用
如果您的应用程序安装在外部存储设备上,则很有可能在卸载sdcard时Android删除您的帐户数据(因为该帐户的身份验证器将不再可用)。因此,为避免这种损失(每次重新启动!!!),您必须仅在内部存储上安装声明身份验证器的应用程序:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="internalOnly"
...
万一遇到麻烦
仔细阅读日志,AccountManger将输出许多日志以帮助您调试代码。
我想以编程方式在liferay中添加站点,因此我创建了一个负责以编程方式添加站点的portlet,但它不起作用,所以请任何人在这方面帮助我。当我单击create site is时,我得到的错误是。这是我的代码: &这是我的sites.java,它是一个操作文件: 我的日志文件是:
我正在使用SpringDoc,并试图以编程方式向OpenApi添加一个模式,但没有成功。 mySchema的描述没有添加到我在生成的YAML文件中看到的模式列表中,如果我试图引用它:
我正在尝试在Android上添加Wifi网络,我想知道如何连接到不广播其SSID的Wifi网络(它是否有空SSID或带有\0s的清晰SSID)。 这是我目前用于广播其SSID的Wifi网络的内容:
问题内容: 我有一个使用动态表单的页面,在该页面上以编程方式创建了组件树(这个问题不值得讨论),我需要呈现的某些输入控件需要ajax处理程序。 xhtml片段(包含在另一个片段中)是: 基于其他SO解答,我有以下Bean代码: 这可以正确渲染,我看到: 但是,单击单选按钮会给我一个JavaScript控制台错误: 现在,如果我修改xhtml以包括“普通” ajax控件,例如 这项工作正常,萤火虫网
问题内容: 我想在头部分中以编程方式添加StyleSheets,但是我看到的示例之一似乎需要多行代码才能仅添加一个样式表,即使我可能需要很多: 示例代码: 我也使用方法,但是它也不起作用。对象null抛出了错误。 我也使用了和东西,但是它们抛出了文字错误,这是我认为的常见错误。 我使用此代码: 起初它起作用,但是当我更改页面时,它停止工作。 我正在使用“母版页”,并且正在文件中编写这些代码,也有人
我试图在logback中动态添加一个appender。这是我的代码。 它工作正常,但仅适用于添加追加器的特定记录器。有没有办法让它适用于应用程序中的所有记录器?我正在寻找一种动态添加和删除追加器的方法。