【问题标题】:Android getting dynamic permission from third party defined permissionsAndroid 从第三方定义的权限获取动态权限
【发布时间】:2015-12-08 00:38:07
【问题描述】:

我正在开展一个尝试将数据从 Android 应用程序发送到 Tizen 磨损手表的项目。我有一个三星提供的示例应用程序,但这是基于 Eclipse (R.I.P) 的超级旧版本。

所以,我创建了一个示例应用程序,第一步是获取权限(对于 Marshmallow 操作系统)。这些权限由 Manifest 文件中的示例代码提供。

<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 会自动授予我蓝牙权限,但不知道如何获得这些三星权限。

【问题讨论】:

    标签: android bluetooth permissions wear-os


    【解决方案1】:

    只有specific dangerous permissions 需要requesting them at run time。因此,您无需编写任何与权限相关的代码即可获得这些权限。

    【讨论】:

    • 感谢@ianhanniballake,这就是为什么我看不到蓝牙对话框的解释。三星权限呢?这是否意味着只有 Android 危险权限必须在应用启动时获得,并且这些三星权限已经被授予(因为它们不是 Android 权限)?
    • 正确:只需要请求表中的那些 - 三星应该自动授予。
    • 我也有同样的问题。尽管已在清单文件中声明,但未授予三星权限。所以我在尝试访问数据时出错。知道如何获得许可吗?
    猜你喜欢
    • 2011-06-17
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-21
    • 2012-11-11
    • 2016-11-09
    相关资源
    最近更新 更多