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。因此,您无需编写任何与权限相关的代码即可获得任何这些权限。