Hi KilicBeg,

Have you managed to figure it out? I have the same problem.

My problem simply is adding a custom permission like
android.permission.CAMERA to allow user use some custom
hardware feature. I've added one in platform.xml but failed in
checkCallingPermission(String16(android.permission.MY_PERMISSION))
when client connect to service.

So my question is
1. is it possible to add custom permission in android?
2. how to do it if it is feasible?

BTW, i know that my question may better post into android-post because it
derives from custom hardware,
but i post it here because i do not think this problem is
hardware-independent and hoping for more help.

Cheers,
- rookie

On Tue, Mar 9, 2010 at 6:55 AM, KilicBeg <kilic...@gmail.com> wrote:

> Hi,
>
> I am unable to access my custom service after setting permission.
> 03-08 16:38:15.730: WARN/ActivityManager(53): Permission Denial:
> Accessing service ComponentInfo{com.kilic.service/
> com.kilic.service.AdditionService} from pid=235, uid=10026 requires
> com.kilic.service.permission.MY_FIRST_SERVICE
> 03-08 16:41:53.141: INFO/System.out(314): Not allowed to bind to
> service Intent { act=com.kilic.service.IAdditionService }
>
> If I remove the permission everything works fine. Is there anything
> special I need to do in the client manifest other than <uses-
> permission> ?
>
> Here is my code snippet for the service:
>
> package com.kilic.service;
>
> import android.app.Service;
> import android.content.Intent;
> import android.content.pm.PackageManager;
> import android.os.IBinder;
> import android.util.Log;
>
> /**
>  * This class exposes the remote service to the client
>  */
> public class AdditionService extends Service {
>  private static final String TAG = "AdditionService";
>
>
>  private final IAdditionService.Stub binder=new
> IAdditionService.Stub() {
>                public int add(int value1, int value2) {
>              Log.d(TAG, String.format("AdditionService.add(%d,
> %d)",value1, value2));
>                        return toppla(value1, value2);
>                }
>  };
>
>  @Override
>  public void onCreate() {
>    super.onCreate();
>    Log.d(TAG, "onCreate()");
>  }
>
>  @Override
>  public IBinder onBind(Intent intent)
>  {
>          //if(intent.getAction() != null &&
> intent.getAction().equals(ACTION_SERVICE_MANAGEMENT)) {
>                  // check permission
>          System.out.println("intent.getAction() = " + intent.getAction());
>
>
> if(this.checkCallingPermission("com.kilic.service.permission.MY_FIRST_SERVICE")
> == PackageManager.PERMISSION_DENIED) {
> //                                      Log.d(TAG, "Checked for permission:
> " + PERMISSION_MANAGEMENT
> + "\nresult: " + checkCallingPermission(PERMISSION_MANAGEMENT));
>                                                  Log.d(TAG, "Checked for
> permission: \nresult: " +
> checkCallingPermission("com.kilic.service.permission.MY_FIRST_SERVICE"));
>                          throw new SecurityException();
>                }
>                  // return management binder
>                //return (binder);
>          //}
>
>          Log.d(TAG, "onBind finished");
>          // call was not local so return public binder
>          return (binder);
>  }
>
>  /*
>  @Override
>  public IBinder onBind(Intent intent) {
>
>    return (binder);
>
>  } */
>
> /**
>  * Implementation of the add() method
>  */
>  private int toppla(int value1, int value2) {
>      Log.d(TAG, String.format("AdditionService.toppla(%d,
> %d)",value1, value2));
>      return value1 + value2;
>  }
>
>
>  @Override
>  public void onDestroy() {
>    super.onDestroy();
>    Log.d(TAG, "onDestroy()");
>  }
> }
>
> ------------------------------------------------------------------------------------------
> <?xml version="1.0" encoding="utf-8"?>
> <manifest xmlns:android="http://schemas.android.com/apk/res/android";
>      package="com.kilic.service"
>      android:versionCode="1"
>      android:versionName="1.0">
>    <application android:icon="@drawable/icon" android:label="@string/
> app_name">
>                <service android:name=".AdditionService"
>
> android:permission="com.kilic.service.permission.MY_FIRST_SERVICE"
>                                 android:process=":remote"
>                                 android:enabled="true"
>                                 android:exported="true">
>
>                        <intent-filter>
>                                <action
> android:name="com.kilic.service.IAdditionService" />
>                        </intent-filter>
>                </service>
>    </application>
>    <uses-sdk android:minSdkVersion="4" />
> <uses-permission
> android:name="com.kilic.service.permission.MY_FIRST_SERVICE"></uses-
> permission>
>
> </manifest>
>
> ===============================================
> And this is the client code:
>
> package com.kilic.service.client;
>
> import com.kilic.service.client.R;
> import android.app.Activity;
> import android.content.ComponentName;
> import android.content.Context;
> import android.content.Intent;
> import android.content.ServiceConnection;
> import android.os.Bundle;
> import android.os.IBinder;
> import android.os.RemoteException;
> import android.util.Log;
> import android.view.View;
> import android.view.View.OnClickListener;
> import android.widget.Button;
> import android.widget.EditText;
> import android.widget.TextView;
> import android.widget.Toast;
> import com.kilic.service.IAdditionService;
>
>
> public class AIDLDemo extends Activity {
>  private static final String TAG = "AIDLDemo";
>  private IAdditionService service= null;
>  //private AdditionServiceConnection connection;
>
>  /**
>   * This class represents the actual service connection. It casts the
> bound
>   * stub implementation of the service to the AIDL interface.
>   */
>  private ServiceConnection  svcConn  = new ServiceConnection() {
>
>            public void onServiceConnected(ComponentName name, IBinder
> boundService) {
>              service = IAdditionService.Stub.asInterface(boundService);
>              Log.d(AIDLDemo.TAG, "onServiceConnected() connected");
>              Toast.makeText(AIDLDemo.this, "Service connected",
> Toast.LENGTH_LONG)
>                  .show();
>            }
>
>            public void onServiceDisconnected(ComponentName name) {
>              service = null;
>              Log.d(AIDLDemo.TAG, "onServiceDisconnected() disconnected");
>              Toast.makeText(AIDLDemo.this, "Service connected",
> Toast.LENGTH_LONG)
>                  .show();
>            }
>  };
>
>
>  /** Unbinds this activity from the service. */
>  private void releaseService() {
>    unbindService(svcConn);
>    svcConn = null;
>    Log.d(TAG, "releaseService() unbound.");
>  }
>
>
>  /** Called when the activity is first created. */
>  @Override
>  public void onCreate(Bundle savedInstanceState) {
>    super.onCreate(savedInstanceState);
>    setContentView(R.layout.main);
>
>    // Setup the UI
>    Button buttonCalc = (Button) findViewById(R.id.buttonCalc);
>
>    buttonCalc.setOnClickListener(new OnClickListener() {
>      TextView result = (TextView) findViewById(R.id.result);
>      EditText value1 = (EditText) findViewById(R.id.value1);
>      EditText value2 = (EditText) findViewById(R.id.value2);
>
>      public void onClick(View v) {
>        int v1, v2, res = -1;
>        v1 = Integer.parseInt(value1.getText().toString());
>        v2 = Integer.parseInt(value2.getText().toString());
>
>        try {
>          res = service.add(v1, v2);
>        } catch (RemoteException e) {
>          Log.d(AIDLDemo.TAG, "onClick failed with: " + e);
>          e.printStackTrace();
>        }
>        result.setText(new Integer(res).toString());
>      }
>    });
>    /** Binds this activity to the service. */
>    try {
>        boolean ret = bindService(new
> Intent(IAdditionService.class.getName()), svcConn,
> Context.BIND_AUTO_CREATE);
>    }
>    catch (SecurityException se) {
>        System.out.println(se.getMessage());
>    }
>
>  }
>
>  /** Called when the activity is about to be destroyed. */
>  @Override
>  protected void onDestroy() {
>        super.onDestroy();
>    releaseService();
>  }
>
> }
>
> -----------------------------------------------------------------------------------------------------------------------------------
> <?xml version="1.0" encoding="utf-8"?>
> <manifest xmlns:android="http://schemas.android.com/apk/res/android";
>      package="com.kilic.service.client"
>      android:versionCode="1"
>      android:versionName="1.0">
>    <application android:icon="@drawable/icon" android:label="@string/
> app_name">
>        <activity android:name=".AIDLDemo"
>                  android:label="@string/app_name">
>            <intent-filter>
>                <action android:name="android.intent.action.MAIN" />
>                <category
> android:name="android.intent.category.LAUNCHER" />
>            </intent-filter>
>        </activity>
>
>    </application>
>    <uses-sdk android:minSdkVersion="5" />
> <uses-permission
> android:name="com.kilic.service.permission.MY_FIRST_SERVICE"></uses-
> permission>
>
> </manifest>
>
>
> ================================================================================
>
>
>
> I would appreciate any help.
>
> Thanks,
>  - Kilic
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to android-developers@googlegroups.com
> To unsubscribe from this group, send email to
> android-developers+unsubscr...@googlegroups.com<android-developers%2bunsubscr...@googlegroups.com>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to