Reputation: 511
I run my application in two different Android devices. The first is an Arnova 9 G2 Tablet and the second a Sony Xperia P. In the Arnova tablet my application executed successfully, but in the Sony Xperia P phone, the LogCat displays me the following error:
/data/data/com.example.androidjnetpcaptest/interfaces: open failed: EACCES (Permission denied) FATAL EXCEPTION: main java.lang.NullPointerException at com.example.androidjnetpcaptest.InterfacesFragment.onCreateView(InterfacesFragment.java:35)
My manifest XML file is:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.androidjnetpcaptest"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="19" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.pemission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".SplashScreenActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/app_name" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.Default" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<activity
android:name=".InformationsActivity"
android:theme="@android:style/Theme.Holo"
android:label="@string/app_name" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.Default" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
And the InterfacesFragment class is:
public class InterfacesFragment extends Fragment
{
private Scanner inputStream = null;
private TextView interfacesTextView = null;
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState )
{
try
{
inputStream = new Scanner( new FileInputStream( "/data/data/com.example.androidjnetpcaptest/interfaces" ) );
}
catch ( FileNotFoundException e )
{
Log.e( "InterfacesFragment_ERROR: ", e.getMessage() );
}
String lines = "";
while ( inputStream.hasNextLine() )
{
lines = lines + inputStream.nextLine() + "\n";
}
inputStream.close();
final ProgressDialog ringProgressDialog = ProgressDialog.show( getActivity(), "Please wait ...", "Finding interfaces ...", true );
ringProgressDialog.setCancelable( true );
new Thread(new Runnable()
{
@Override
public void run()
{
try
{
Thread.sleep( 4000 );
}
catch ( Exception e )
{
}
ringProgressDialog.dismiss();
}
}).start();
View rootView = inflater.inflate(R.layout.interfaces, container, false);
interfacesTextView = ( TextView ) rootView.findViewById( R.id.interfacesTextView );
interfacesTextView.setText( lines );
interfacesTextView.setMovementMethod( new ScrollingMovementMethod() );
return rootView;
}
}
Upvotes: 0
Views: 38
Reputation: 15775
The trouble is the use of the absolute path /data/data/com.example. androidjnetpcaptest/interfaces
. You should not assume this is the data location for the app. Apps can be moved to external storage and since ICS the system supports multiple users (people) where the app gets different storage per user. Instead, use Context.getFilesDir()
to get the app-private location where files can be created and stored.
You do not need any special permissions to read/write this space.
Upvotes: 1