Android从第三方定义的权限获得动态权限

时间:2015-12-08 00:38:07

标签: android bluetooth permissions wear-os

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

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

  
    
    
    
    
    
 

所以,我正试图在App启动时获得这些权限。

 公共类MainActivity扩展了AppCompatActivity
{
    private static final String TAG =“MainActivity”;
    private static final int MY_PERMISSIONS_REQUEST = 101;

    @覆盖
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);

        //检查权限
        getPermissions();
    }

    public void getPermissions()
    {
        //无需解释,我们可以申请许可。
        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);
    }

    @覆盖
    public void onRequestPermissionsResult(int requestCode,@ NonNull String permissions [],@ NonNull int [] grantResults)
    {
        for(int i:grantResults)
        {
            Log.d(TAG,“结果:”+ i);
        }

        开关(requestCode)
        {
            案例MY_PERMISSIONS_REQUEST:
            {
                //如果取消请求,结果数组为空。
                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(“授予权限”);
                }
                其他
                {
                    displayMessage(“请接受继续权限。”);
                    this.finish();
                }
            }
        }
    }

    private void displayMessage(String message)
    {
        if(TextUtils.isEmpty(message))
        {
            返回;
        }

        Toast.makeText(this,message,Toast.LENGTH_LONG).show();
    }
}
 

当我运行它时,即使对于蓝牙也没有显示权限请求对话框,应用程序显然会关闭(由于代码)。我在Log中看到以下结果:

  D / MainActivity:结果:0
D / MainActivity:结果:0
D / MainActivity:结果:-1
D / MainActivity:结果:-1
D / MainActivity:结果:-1
D / MainActivity:结果:-1
 

出于某些原因,Android会自动向我提供蓝牙权限,但不知道如何获得这些三星权限。

1 个答案:

答案 0 :(得分:0)

只有specific dangerous permissions需要requesting them at run time。因此,您不需要编写任何与权限相关的代码来授予任何这些权限。