Android 从第三方定义的权限中获取动态权限
Android getting dynamic permission from third party defined permissions
我正在开展一个项目,试图将数据从 Android 应用程序发送到 Tizen 佩戴手表。我有一个三星提供的示例应用程序,但这是基于 Eclipse 的超旧应用程序,(R.I.P)。
因此,我创建了一个示例应用程序,第一步是获取权限(对于 Marshmallow OS)。这些权限已由清单文件中的示例代码提供。
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK" />
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
<uses-permission android:name="com.samsung.WATCH_APP_TYPE.Companion" />
<uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION" />
所以,我正在尝试在应用启动时获得这些权限。
public class MainActivity extends AppCompatActivity
{
private static final String TAG = "MainActivity";
private static final int MY_PERMISSIONS_REQUEST = 101;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Check permissions
getPermissions();
}
public void getPermissions()
{
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
"com.samsung.accessory.permission.ACCESSORY_FRAMEWORK",
"com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY",
"com.samsung.WATCH_APP_TYPE.Companion",
"com.samsung.wmanager.ENABLE_NOTIFICATION"}, MY_PERMISSIONS_REQUEST);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults)
{
for(int i : grantResults)
{
Log.d(TAG, "Result: " + i);
}
switch (requestCode)
{
case MY_PERMISSIONS_REQUEST:
{
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED &&
grantResults[1] == PackageManager.PERMISSION_GRANTED &&
grantResults[2] == PackageManager.PERMISSION_GRANTED &&
grantResults[3] == PackageManager.PERMISSION_GRANTED &&
grantResults[4] == PackageManager.PERMISSION_GRANTED &&
grantResults[5] == PackageManager.PERMISSION_GRANTED)
{
displayMessage("Permissions granted");
}
else
{
displayMessage("Please accept permissions to proceed.");
this.finish();
}
}
}
}
private void displayMessage(String message)
{
if (TextUtils.isEmpty(message))
{
return;
}
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
当我 运行 它时,即使是蓝牙也没有权限请求对话框显示,并且应用程序明显关闭(由于代码)。我在日志中看到以下结果:
D/MainActivity: Result: 0
D/MainActivity: Result: 0
D/MainActivity: Result: -1
D/MainActivity: Result: -1
D/MainActivity: Result: -1
D/MainActivity: Result: -1
出于某些原因 Android 自动给我蓝牙权限,但不知道如何获得这些三星权限。
仅specific dangerous permissions are require requesting them at run time。因此,您无需编写任何与权限相关的代码即可获得任何这些权限。
我正在开展一个项目,试图将数据从 Android 应用程序发送到 Tizen 佩戴手表。我有一个三星提供的示例应用程序,但这是基于 Eclipse 的超旧应用程序,(R.I.P)。
因此,我创建了一个示例应用程序,第一步是获取权限(对于 Marshmallow OS)。这些权限已由清单文件中的示例代码提供。
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="com.samsung.accessory.permission.ACCESSORY_FRAMEWORK" />
<uses-permission android:name="com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY" />
<uses-permission android:name="com.samsung.WATCH_APP_TYPE.Companion" />
<uses-permission android:name="com.samsung.wmanager.ENABLE_NOTIFICATION" />
所以,我正在尝试在应用启动时获得这些权限。
public class MainActivity extends AppCompatActivity
{
private static final String TAG = "MainActivity";
private static final int MY_PERMISSIONS_REQUEST = 101;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Check permissions
getPermissions();
}
public void getPermissions()
{
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.BLUETOOTH,
Manifest.permission.BLUETOOTH_ADMIN,
"com.samsung.accessory.permission.ACCESSORY_FRAMEWORK",
"com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY",
"com.samsung.WATCH_APP_TYPE.Companion",
"com.samsung.wmanager.ENABLE_NOTIFICATION"}, MY_PERMISSIONS_REQUEST);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[], @NonNull int[] grantResults)
{
for(int i : grantResults)
{
Log.d(TAG, "Result: " + i);
}
switch (requestCode)
{
case MY_PERMISSIONS_REQUEST:
{
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED &&
grantResults[1] == PackageManager.PERMISSION_GRANTED &&
grantResults[2] == PackageManager.PERMISSION_GRANTED &&
grantResults[3] == PackageManager.PERMISSION_GRANTED &&
grantResults[4] == PackageManager.PERMISSION_GRANTED &&
grantResults[5] == PackageManager.PERMISSION_GRANTED)
{
displayMessage("Permissions granted");
}
else
{
displayMessage("Please accept permissions to proceed.");
this.finish();
}
}
}
}
private void displayMessage(String message)
{
if (TextUtils.isEmpty(message))
{
return;
}
Toast.makeText(this, message, Toast.LENGTH_LONG).show();
}
}
当我 运行 它时,即使是蓝牙也没有权限请求对话框显示,并且应用程序明显关闭(由于代码)。我在日志中看到以下结果:
D/MainActivity: Result: 0
D/MainActivity: Result: 0
D/MainActivity: Result: -1
D/MainActivity: Result: -1
D/MainActivity: Result: -1
D/MainActivity: Result: -1
出于某些原因 Android 自动给我蓝牙权限,但不知道如何获得这些三星权限。
仅specific dangerous permissions are require requesting them at run time。因此,您无需编写任何与权限相关的代码即可获得任何这些权限。