应用互联网为主要和没有其余

时间:2014-06-16 09:22:45

标签: android permissions

我有一个应用程序,其中起始页面需要互联网,

休息想在没有互联网的情况下工作(即,只有一项活动需要互联网许可)。

但是当我关闭互联网时,该应用会显示打开互联网连接这样的消息,然后我才能继续进一步(这里我想使用互联网)。 对此有什么解决方案吗?

清单文件:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.exampleMock.ibps_test"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:screenOrientation="landscape" >

    <activity
        android:name="com.exampleMock.ibps_test.MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="landscape" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name="com.exampleMock.ibps_test.testClass"
        android:label="@string/app_name" 
        android:screenOrientation="landscape"/>

    <activity
        android:name="com.exampleMock.ibps_test.startTest"
        android:label="@string/app_name" 
        android:screenOrientation="landscape"/>
     <activity
        android:name="com.exampleMock.ibps_test.resultActivity"
        android:label="@string/app_name" 
        android:screenOrientation="landscape"/>
     <activity
        android:name="com.exampleMock.ibps_test.showDialog"
        android:label="@string/app_name" 
        android:screenOrientation="landscape"/>

     <activity
        android:name="com.exampleMock.ibps_test.showSolution"
        android:label="@string/app_name"
       android:screenOrientation="landscape" />
     <activity
        android:name="com.exampleMock.ibps_test.InfoGift"
        android:label="@string/app_name"
       android:screenOrientation="landscape"/>
</application>

主要活动:

public class MainActivity extends ActionBarActivity implements LoaderCallbacks<Void>,                 AsyncHttpRequestDelegate
{
static EditText n;
static EditText p;
ProgressBar pb;
static String mail="";
private DatabaseHelper helper;
private SQLiteDatabase db;
private static WeakReference<MainActivity> mActivity;

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

    helper=new DatabaseHelper(this);
    helper.initializeDataBase();
    db=helper.getWritableDatabase();

    String stat=check();
    if(stat.equals("true"))
    {
        gotoNextPage();
    }
    else
    {
     n=(EditText)findViewById(R.id.name);
     p=(EditText)findViewById(R.id.phone);
     pb=(ProgressBar)findViewById(R.id.progressBar1);
     pb.setVisibility(View.GONE);
     mail=fetchEmail();
      /*    
     if(mail==null)
        {
            EditText m=(EditText)findViewById(R.id.mail);
            m.setVisibility(1);
            mail=m.getText().toString();
        }  */

     Button b=(Button)findViewById(R.id.regBtn);
     b.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            if(n.getText().toString().length()<1)
            {
                n.requestFocus();
                Toast.makeText(MainActivity.this, "Enter your  Name", Toast.LENGTH_SHORT).show();
            }
            else if(p.getText().toString().length()<10)
            {
                p.requestFocus();
                Toast.makeText(MainActivity.this, "Enter a valid phone number", Toast.LENGTH_SHORT).show();
            }
            else
            {
                ConnectivityManager connMgr = (ConnectivityManager) 
                        getSystemService(Context.CONNECTIVITY_SERVICE);
                    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
                    if (networkInfo != null && networkInfo.isConnected()) {
                        pb.setVisibility(View.VISIBLE);
                        //call asyncTask
                        startWork();
                    } else {
                        Toast.makeText(MainActivity.this, "No Network connection available...",Toast.LENGTH_SHORT).show();
                    }

            }

        }
    });
  }
}

public String fetchEmail()
{
    String e="";
    Pattern email= Patterns.EMAIL_ADDRESS;
    Account[] accounts= AccountManager.get(this).getAccounts();
    for(Account account:accounts)
    {
        if(email.matcher(account.name).matches())
        {
            e=account.name;
            return e;

        }
    }
    return null;
}

public String check()
{
    String flag="";
    String sql="select * from reg_status";
    Cursor c=db.rawQuery(sql, null);
    if(c!=null)
    {
        c.moveToFirst();
        flag=c.getString(0);
    }
    return flag;
}

public void updateStatus()
{
    String sql="update reg_status set status = 'true'";
    db.execSQL(sql);
    gotoNextPage();
}

public void gotoNextPage()
{
    Intent intent=new Intent(this,startTest.class);
    startActivity(intent);
}

void startWork() {
    getSupportLoaderManager().initLoader(0, (Bundle) null, this);
}

static class AsyncTaskMaker extends AsyncTaskLoader<Void> {
    int progress = 0;
    int percentProgress = 0;
    int fileLength = 0;

    AsyncTaskMaker(MainActivity activity) {
        super(activity);
        mActivity = new WeakReference<MainActivity>(activity);
    }



  @Override
    public Void loadInBackground() {
     System.out.println("inside loadInBackground");
     processWebRequest();

     return null;

    }

}


@Override
public void onLoadFinished(android.support.v4.content.Loader<Void> arg0,
    Void arg1) {
 pb.setVisibility(View.GONE);
 updateStatus();
  //Toast.makeText(MainActivity.this, "Load finished", Toast.LENGTH_SHORT).show();
    gotoNextPage();
}

@Override
public void onLoaderReset(android.support.v4.content.Loader<Void> arg0) {
  //Toast.makeText(MainActivity.this, "Load reset", Toast.LENGTH_SHORT).show();
}


 @Override
 public android.support.v4.content.Loader<Void> onCreateLoader(int arg0, Bundle arg1) {

  AsyncTaskMaker asyncTaskLoader = new AsyncTaskMaker(this);
  asyncTaskLoader.forceLoad();
  return asyncTaskLoader;
}

private static void processWebRequest(){


 HttpClient httpclient = new DefaultHttpClient();
 HttpPost httpPost=new HttpPost("http://beta.wisdom24x7.com/gapps.php/");
 //System.out.println("inside processWebRequest"); 
    try
    {

        List<NameValuePair> pair=new ArrayList<NameValuePair>(4);
        pair.add(new BasicNameValuePair("name",n.getText().toString()));
        pair.add(new BasicNameValuePair("email",mail));
        pair.add(new BasicNameValuePair("phone",p.getText().toString()));
        pair.add(new BasicNameValuePair("exam","AIEEE"));
        httpPost.setEntity(new UrlEncodedFormEntity(pair));

        HttpResponse httpResponse= httpclient.execute(httpPost);
        Log.d("Http Response:", httpResponse.toString());

    }catch(ClientProtocolException e)
    {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }

 }

  @Override
 public void didComplete(HttpRequest request, String responseString) {
  pb.setVisibility(View.GONE);
  //Toast.makeText(MainActivity.this, "data sent", Toast.LENGTH_SHORT).show();

 }

 @Override
 public void didFail(HttpRequest request) {


 }

 @Override
 public void publishProgress(final int progress) {
    if (mActivity.get() != null) {
        mActivity.get().runOnUiThread(new Runnable() {

         @Override
            public void run() {
                mActivity.get().pb.setProgress(progress);
            }
        });
    }
  }
}

另一项不需要互联网的活动:

public class showDialog extends ActionBarActivity
{
CheckBox b1,b2,b3,b4;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.dialog_sub);

    b1=(CheckBox)findViewById(R.id.checkBox1);
    b2=(CheckBox)findViewById(R.id.checkBox2);
    b3=(CheckBox)findViewById(R.id.checkBox3);
    b4=(CheckBox)findViewById(R.id.checkBox4);

    final List<String> subs=new ArrayList<String>();

    ImageButton bn=(ImageButton)findViewById(R.id.imageButton1);
    bn.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            if(b1.isChecked())
                subs.add(b1.getText().toString());
            if(b2.isChecked())
                subs.add(b2.getText().toString());
            if(b3.isChecked())
                subs.add(b3.getText().toString());
            if(b4.isChecked())
                subs.add(b4.getText().toString());
            System.out.print("subjects "+subs);

            Intent intent = new     Intent(showDialog.this,testClass.class);
            intent.putStringArrayListExtra("subject",   (ArrayList<String>) subs);
            startActivity(intent);
        }
    });
}

}

3 个答案:

答案 0 :(得分:1)

您似乎没有自己编写此Android应用程序(否则您将理解该消息的含义)。这条“请求互联网连接”的消息是通过您的应用而不是Android框架完成的。请先了解您的申请,然后提出相关问题。

提示:在“请求互联网连接”消息中显示应用程序内的字符串(通过IDE的搜索功能)并查找显示的原因。你会看到,你可以禁用它。

答案 1 :(得分:0)

您只能为完整的应用设置权限,而不能为单个活动设置权限。

为什么用户在应用程序的其余部分没有互联网连接这么重要?如果您没有在那些“无互联网”活动中编码连接到互联网的任何内容,那么您将不会用完(可能的)日期

答案 2 :(得分:0)

在您的AndroidManifest.xml放置:

 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />

以及您不希望在以下网址中使用互联网连接的每项活动的inonCreate方法:

WifiManager wifiManager = (WifiManager)this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(false);